• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/mtd/ubi/

Lines Matching refs:ubi

29 #include "ubi.h"
32 static int paranoid_check_volumes(struct ubi_device *ubi);
34 #define paranoid_check_volumes(ubi) 0
40 /* Device attributes corresponding to files in '/<sysfs>/class/ubi/ubiX_Y' */
59 * "Show" method for files in '/<sysfs>/class/ubi/ubiX_Y/'.
63 * /<sysfs>/class/ubi/ubiX_Y/reserved_ebs;
65 * C. process 1 starts reading the /<sysfs>/class/ubi/ubiX_Y/reserved_ebs file;
68 * out that the volume was removed from the @ubi->volumes array.
75 struct ubi_device *ubi;
77 ubi = ubi_get_device(vol->ubi->ubi_num);
78 if (!ubi)
81 spin_lock(&ubi->volumes_lock);
82 if (!ubi->volumes[vol->vol_id]) {
83 spin_unlock(&ubi->volumes_lock);
84 ubi_put_device(ubi);
89 spin_unlock(&ubi->volumes_lock);
118 spin_lock(&ubi->volumes_lock);
121 spin_unlock(&ubi->volumes_lock);
122 ubi_put_device(ubi);
137 * @ubi: UBI device description object
147 static int volume_sysfs_init(struct ubi_device *ubi, struct ubi_volume *vol)
195 * @ubi: UBI device description object
202 * @ubi->device_mutex locked.
204 int ubi_create_volume(struct ubi_device *ubi, struct ubi_mkvol_req *req)
211 if (ubi->ro_mode)
218 spin_lock(&ubi->volumes_lock);
222 for (i = 0; i < ubi->vtbl_slots; i++)
223 if (!ubi->volumes[i]) {
237 ubi->ubi_num, vol_id, (unsigned long long)req->bytes,
242 if (ubi->volumes[vol_id]) {
248 for (i = 0; i < ubi->vtbl_slots; i++)
249 if (ubi->volumes[i] &&
250 ubi->volumes[i]->name_len == req->name_len &&
251 !strcmp(ubi->volumes[i]->name, req->name)) {
257 vol->usable_leb_size = ubi->leb_size - ubi->leb_size % req->alignment;
262 if (vol->reserved_pebs > ubi->avail_pebs) {
263 dbg_err("not enough PEBs, only %d available", ubi->avail_pebs);
267 ubi->avail_pebs -= vol->reserved_pebs;
268 ubi->rsvd_pebs += vol->reserved_pebs;
269 spin_unlock(&ubi->volumes_lock);
273 vol->data_pad = ubi->leb_size % vol->alignment;
277 vol->ubi = ubi;
283 err = ubi_wl_flush(ubi);
314 dev = MKDEV(MAJOR(ubi->cdev.dev), vol_id + 1);
322 vol->dev.parent = &ubi->dev;
326 dev_set_name(&vol->dev, "%s_%d", ubi->ubi_name, vol->vol_id);
333 err = volume_sysfs_init(ubi, vol);
349 err = ubi_change_vtbl_record(ubi, vol_id, &vtbl_rec);
353 spin_lock(&ubi->volumes_lock);
354 ubi->volumes[vol_id] = vol;
355 ubi->vol_count += 1;
356 spin_unlock(&ubi->volumes_lock);
358 ubi_volume_notify(ubi, vol, UBI_VOLUME_ADDED);
359 if (paranoid_check_volumes(ubi))
381 spin_lock(&ubi->volumes_lock);
382 ubi->rsvd_pebs -= vol->reserved_pebs;
383 ubi->avail_pebs += vol->reserved_pebs;
385 spin_unlock(&ubi->volumes_lock);
401 * code in case of failure. The caller has to have the @ubi->device_mutex
407 struct ubi_device *ubi = vol->ubi;
410 dbg_gen("remove device %d, volume %d", ubi->ubi_num, vol_id);
412 ubi_assert(vol == ubi->volumes[vol_id]);
414 if (ubi->ro_mode)
417 spin_lock(&ubi->volumes_lock);
426 ubi->volumes[vol_id] = NULL;
427 spin_unlock(&ubi->volumes_lock);
430 err = ubi_change_vtbl_record(ubi, vol_id, NULL);
436 err = ubi_eba_unmap_leb(ubi, vol, i);
444 spin_lock(&ubi->volumes_lock);
445 ubi->rsvd_pebs -= reserved_pebs;
446 ubi->avail_pebs += reserved_pebs;
447 i = ubi->beb_rsvd_level - ubi->beb_rsvd_pebs;
449 i = ubi->avail_pebs >= i ? i : ubi->avail_pebs;
450 ubi->avail_pebs -= i;
451 ubi->rsvd_pebs += i;
452 ubi->beb_rsvd_pebs += i;
456 ubi->vol_count -= 1;
457 spin_unlock(&ubi->volumes_lock);
459 ubi_volume_notify(ubi, vol, UBI_VOLUME_REMOVED);
460 if (!no_vtbl && paranoid_check_volumes(ubi))
467 spin_lock(&ubi->volumes_lock);
468 ubi->volumes[vol_id] = vol;
470 spin_unlock(&ubi->volumes_lock);
481 * @ubi->device_mutex locked.
487 struct ubi_device *ubi = vol->ubi;
491 if (ubi->ro_mode)
495 ubi->ubi_num, vol_id, vol->reserved_pebs, reserved_pebs);
515 spin_lock(&ubi->volumes_lock);
517 spin_unlock(&ubi->volumes_lock);
521 spin_unlock(&ubi->volumes_lock);
526 spin_lock(&ubi->volumes_lock);
527 if (pebs > ubi->avail_pebs) {
529 pebs, ubi->avail_pebs);
530 spin_unlock(&ubi->volumes_lock);
534 ubi->avail_pebs -= pebs;
535 ubi->rsvd_pebs += pebs;
540 spin_unlock(&ubi->volumes_lock);
544 memcpy(&vtbl_rec, &ubi->vtbl[vol_id], sizeof(struct ubi_vtbl_record));
546 err = ubi_change_vtbl_record(ubi, vol_id, &vtbl_rec);
552 err = ubi_eba_unmap_leb(ubi, vol, reserved_pebs + i);
556 spin_lock(&ubi->volumes_lock);
557 ubi->rsvd_pebs += pebs;
558 ubi->avail_pebs -= pebs;
559 pebs = ubi->beb_rsvd_level - ubi->beb_rsvd_pebs;
561 pebs = ubi->avail_pebs >= pebs ? pebs : ubi->avail_pebs;
562 ubi->avail_pebs -= pebs;
563 ubi->rsvd_pebs += pebs;
564 ubi->beb_rsvd_pebs += pebs;
572 spin_unlock(&ubi->volumes_lock);
583 ubi_volume_notify(ubi, vol, UBI_VOLUME_RESIZED);
584 if (paranoid_check_volumes(ubi))
590 spin_lock(&ubi->volumes_lock);
591 ubi->rsvd_pebs -= pebs;
592 ubi->avail_pebs += pebs;
593 spin_unlock(&ubi->volumes_lock);
602 * @ubi: UBI device description object
609 int ubi_rename_volumes(struct ubi_device *ubi, struct list_head *rename_list)
614 err = ubi_vtbl_rename_volumes(ubi, rename_list);
626 spin_lock(&ubi->volumes_lock);
629 spin_unlock(&ubi->volumes_lock);
630 ubi_volume_notify(ubi, vol, UBI_VOLUME_RENAMED);
634 if (!err && paranoid_check_volumes(ubi))
641 * @ubi: UBI device description object
648 int ubi_add_volume(struct ubi_device *ubi, struct ubi_volume *vol)
658 dev = MKDEV(MAJOR(ubi->cdev.dev), vol->vol_id + 1);
667 vol->dev.parent = &ubi->dev;
670 dev_set_name(&vol->dev, "%s_%d", ubi->ubi_name, vol->vol_id);
675 err = volume_sysfs_init(ubi, vol);
682 if (paranoid_check_volumes(ubi))
693 * @ubi: UBI device description object
699 void ubi_free_volume(struct ubi_device *ubi, struct ubi_volume *vol)
703 ubi->volumes[vol->vol_id] = NULL;
712 * @ubi: UBI device description object
717 static int paranoid_check_volume(struct ubi_device *ubi, int vol_id)
719 int idx = vol_id2idx(ubi, vol_id);
725 spin_lock(&ubi->volumes_lock);
726 reserved_pebs = be32_to_cpu(ubi->vtbl[vol_id].reserved_pebs);
727 vol = ubi->volumes[idx];
734 spin_unlock(&ubi->volumes_lock);
743 if (vol->alignment > ubi->leb_size || vol->alignment == 0) {
748 n = vol->alignment & (ubi->min_io_size - 1);
754 n = ubi->leb_size % vol->alignment;
771 if (vol->reserved_pebs > ubi->good_peb_count) {
776 n = ubi->leb_size - vol->data_pad;
777 if (vol->usable_leb_size != ubi->leb_size - vol->data_pad) {
833 alignment = be32_to_cpu(ubi->vtbl[vol_id].alignment);
834 data_pad = be32_to_cpu(ubi->vtbl[vol_id].data_pad);
835 name_len = be16_to_cpu(ubi->vtbl[vol_id].name_len);
836 upd_marker = ubi->vtbl[vol_id].upd_marker;
837 name = &ubi->vtbl[vol_id].name[0];
838 if (ubi->vtbl[vol_id].vol_type == UBI_VID_DYNAMIC)
850 spin_unlock(&ubi->volumes_lock);
857 ubi_dbg_dump_vtbl_record(&ubi->vtbl[vol_id], vol_id);
859 spin_unlock(&ubi->volumes_lock);
865 * @ubi: UBI device description object
869 static int paranoid_check_volumes(struct ubi_device *ubi)
873 for (i = 0; i < ubi->vtbl_slots; i++) {
874 err = paranoid_check_volume(ubi, i);