• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/src/linux/linux-2.6/drivers/mtd/ubi/

Lines Matching refs:ubi

28 #include "ubi.h"
31 static void paranoid_check_volumes(struct ubi_device *ubi);
33 #define paranoid_check_volumes(ubi)
39 /* Device attributes corresponding to files in '/<sysfs>/class/ubi/ubiX_Y' */
58 * "Show" method for files in '/<sysfs>/class/ubi/ubiX_Y/'.
62 * /<sysfs>/class/ubi/ubiX_Y/reserved_ebs;
64 * C. process 1 starts reading the /<sysfs>/class/ubi/ubiX_Y/reserved_ebs file;
76 spin_lock(&vol->ubi->volumes_lock);
78 spin_unlock(&vol->ubi->volumes_lock);
101 spin_unlock(&vol->ubi->volumes_lock);
115 * @ubi: UBI device description object
125 static int volume_sysfs_init(struct ubi_device *ubi, struct ubi_volume *vol)
175 * @ubi: UBI device description object
183 int ubi_create_volume(struct ubi_device *ubi, struct ubi_mkvol_req *req)
190 if (ubi->ro_mode)
197 spin_lock(&ubi->volumes_lock);
202 for (i = 0; i < ubi->vtbl_slots; i++)
203 if (!ubi->volumes[i]) {
222 if (ubi->volumes[vol_id]) {
228 for (i = 0; i < ubi->vtbl_slots; i++)
229 if (ubi->volumes[i] &&
230 ubi->volumes[i]->name_len == req->name_len &&
231 strcmp(ubi->volumes[i]->name, req->name) == 0) {
237 vol->usable_leb_size = ubi->leb_size - ubi->leb_size % req->alignment;
244 if (vol->reserved_pebs > ubi->avail_pebs) {
245 dbg_err("not enough PEBs, only %d available", ubi->avail_pebs);
246 spin_unlock(&ubi->volumes_lock);
250 ubi->avail_pebs -= vol->reserved_pebs;
251 ubi->rsvd_pebs += vol->reserved_pebs;
255 vol->data_pad = ubi->leb_size % vol->alignment;
260 vol->ubi = ubi;
261 ubi->volumes[vol_id] = vol;
262 spin_unlock(&ubi->volumes_lock);
268 err = ubi_wl_flush(ubi);
298 err = cdev_add(&vol->cdev, MKDEV(ubi->major, vol_id + 1), 1);
304 err = ubi_create_gluebi(ubi, vol);
309 vol->dev.parent = &ubi->dev;
310 vol->dev.devt = MKDEV(ubi->major, vol->vol_id + 1);
312 sprintf(&vol->dev.bus_id[0], "%s_%d", ubi->ubi_name, vol->vol_id);
317 err = volume_sysfs_init(ubi, vol);
333 err = ubi_change_vtbl_record(ubi, vol_id, &vtbl_rec);
337 spin_lock(&ubi->volumes_lock);
338 ubi->vol_count += 1;
340 spin_unlock(&ubi->volumes_lock);
342 paranoid_check_volumes(ubi);
352 spin_lock(&ubi->volumes_lock);
353 ubi->rsvd_pebs -= vol->reserved_pebs;
354 ubi->avail_pebs += vol->reserved_pebs;
356 spin_unlock(&ubi->volumes_lock);
368 spin_lock(&ubi->volumes_lock);
369 ubi->rsvd_pebs -= vol->reserved_pebs;
370 ubi->avail_pebs += vol->reserved_pebs;
371 spin_unlock(&ubi->volumes_lock);
387 struct ubi_device *ubi = vol->ubi;
392 ubi_assert(vol == ubi->volumes[vol_id]);
394 if (ubi->ro_mode)
401 err = ubi_change_vtbl_record(ubi, vol_id, NULL);
406 err = ubi_eba_unmap_leb(ubi, vol_id, i);
411 spin_lock(&ubi->volumes_lock);
413 ubi->volumes[vol_id] = NULL;
414 spin_unlock(&ubi->volumes_lock);
422 spin_lock(&ubi->volumes_lock);
423 ubi->rsvd_pebs -= reserved_pebs;
424 ubi->avail_pebs += reserved_pebs;
425 i = ubi->beb_rsvd_level - ubi->beb_rsvd_pebs;
427 i = ubi->avail_pebs >= i ? i : ubi->avail_pebs;
428 ubi->avail_pebs -= i;
429 ubi->rsvd_pebs += i;
430 ubi->beb_rsvd_pebs += i;
434 ubi->vol_count -= 1;
435 spin_unlock(&ubi->volumes_lock);
437 paranoid_check_volumes(ubi);
454 struct ubi_device *ubi = vol->ubi;
458 if (ubi->ro_mode)
464 ubi_assert(vol == ubi->volumes[vol_id]);
487 spin_lock(&ubi->volumes_lock);
488 if (pebs > ubi->avail_pebs) {
490 pebs, ubi->avail_pebs);
491 spin_unlock(&ubi->volumes_lock);
495 ubi->avail_pebs -= pebs;
496 ubi->rsvd_pebs += pebs;
501 spin_unlock(&ubi->volumes_lock);
505 memcpy(&vtbl_rec, &ubi->vtbl[vol_id], sizeof(struct ubi_vtbl_record));
507 err = ubi_change_vtbl_record(ubi, vol_id, &vtbl_rec);
513 err = ubi_eba_unmap_leb(ubi, vol_id, reserved_pebs + i);
517 spin_lock(&ubi->volumes_lock);
518 ubi->rsvd_pebs += pebs;
519 ubi->avail_pebs -= pebs;
520 pebs = ubi->beb_rsvd_level - ubi->beb_rsvd_pebs;
522 pebs = ubi->avail_pebs >= pebs ? pebs : ubi->avail_pebs;
523 ubi->avail_pebs -= pebs;
524 ubi->rsvd_pebs += pebs;
525 ubi->beb_rsvd_pebs += pebs;
533 spin_unlock(&ubi->volumes_lock);
543 paranoid_check_volumes(ubi);
548 spin_lock(&ubi->volumes_lock);
549 ubi->rsvd_pebs -= pebs;
550 ubi->avail_pebs += pebs;
551 spin_unlock(&ubi->volumes_lock);
560 * @ubi: UBI device description object
567 int ubi_add_volume(struct ubi_device *ubi, int vol_id)
570 struct ubi_volume *vol = ubi->volumes[vol_id];
579 err = cdev_add(&vol->cdev, MKDEV(ubi->major, vol->vol_id + 1), 1);
585 err = ubi_create_gluebi(ubi, vol);
590 vol->dev.parent = &ubi->dev;
591 vol->dev.devt = MKDEV(ubi->major, vol->vol_id + 1);
593 sprintf(&vol->dev.bus_id[0], "%s_%d", ubi->ubi_name, vol->vol_id);
598 err = volume_sysfs_init(ubi, vol);
606 paranoid_check_volumes(ubi);
618 * @ubi: UBI device description object
624 void ubi_free_volume(struct ubi_device *ubi, int vol_id)
627 struct ubi_volume *vol = ubi->volumes[vol_id];
634 ubi->volumes[vol_id] = NULL;
643 * @ubi: UBI device description object
646 static void paranoid_check_volume(const struct ubi_device *ubi, int vol_id)
648 int idx = vol_id2idx(ubi, vol_id);
650 const struct ubi_volume *vol = ubi->volumes[idx];
654 reserved_pebs = ubi32_to_cpu(ubi->vtbl[vol_id].reserved_pebs);
669 if (vol->alignment > ubi->leb_size || vol->alignment == 0) {
674 n = vol->alignment % ubi->min_io_size;
680 n = ubi->leb_size % vol->alignment;
702 if (vol->reserved_pebs > ubi->good_peb_count) {
707 n = ubi->leb_size - vol->data_pad;
708 if (vol->usable_leb_size != ubi->leb_size - vol->data_pad) {
768 alignment = ubi32_to_cpu(ubi->vtbl[vol_id].alignment);
769 data_pad = ubi32_to_cpu(ubi->vtbl[vol_id].data_pad);
770 name_len = ubi16_to_cpu(ubi->vtbl[vol_id].name_len);
771 upd_marker = ubi->vtbl[vol_id].upd_marker;
772 name = &ubi->vtbl[vol_id].name[0];
773 if (ubi->vtbl[vol_id].vol_type == UBI_VID_DYNAMIC)
790 ubi_dbg_dump_vtbl_record(&ubi->vtbl[vol_id], vol_id);
796 * @ubi: UBI device description object
798 static void paranoid_check_volumes(struct ubi_device *ubi)
802 mutex_lock(&ubi->vtbl_mutex);
803 spin_lock(&ubi->volumes_lock);
804 for (i = 0; i < ubi->vtbl_slots; i++)
805 paranoid_check_volume(ubi, i);
806 spin_unlock(&ubi->volumes_lock);
807 mutex_unlock(&ubi->vtbl_mutex);