Lines Matching full:ubi

8 /* This file mostly implements UBI kernel API functions */
21 #include "ubi.h"
24 * ubi_do_get_device_info - get information about UBI device.
25 * @ubi: UBI device description object
28 * This function is the same as 'ubi_get_device_info()', but it assumes the UBI
31 void ubi_do_get_device_info(struct ubi_device *ubi, struct ubi_device_info *di) in ubi_do_get_device_info() argument
33 di->ubi_num = ubi->ubi_num; in ubi_do_get_device_info()
34 di->leb_size = ubi->leb_size; in ubi_do_get_device_info()
35 di->leb_start = ubi->leb_start; in ubi_do_get_device_info()
36 di->min_io_size = ubi->min_io_size; in ubi_do_get_device_info()
37 di->max_write_size = ubi->max_write_size; in ubi_do_get_device_info()
38 di->ro_mode = ubi->ro_mode; in ubi_do_get_device_info()
40 di->cdev = ubi->cdev.dev; in ubi_do_get_device_info()
46 * ubi_get_device_info - get information about UBI device.
47 * @ubi_num: UBI device number
50 * This function returns %0 in case of success, %-EINVAL if the UBI device
51 * number is invalid, and %-ENODEV if there is no such UBI device.
55 struct ubi_device *ubi; in ubi_get_device_info() local
59 ubi = ubi_get_device(ubi_num); in ubi_get_device_info()
60 if (!ubi) in ubi_get_device_info()
62 ubi_do_get_device_info(ubi, di); in ubi_get_device_info()
63 ubi_put_device(ubi); in ubi_get_device_info()
69 * ubi_do_get_volume_info - get information about UBI volume.
70 * @ubi: UBI device description object
74 void ubi_do_get_volume_info(struct ubi_device *ubi, struct ubi_volume *vol, in ubi_do_get_volume_info() argument
78 vi->ubi_num = ubi->ubi_num; in ubi_do_get_volume_info()
92 * ubi_get_volume_info - get information about UBI volume.
99 ubi_do_get_volume_info(desc->vol->ubi, desc->vol, vi); in ubi_get_volume_info()
104 * ubi_open_volume - open UBI volume.
105 * @ubi_num: UBI device number
111 * nobody else will be able to open this volume. UBI allows to have many volume
125 struct ubi_device *ubi; in ubi_open_volume() local
138 * First of all, we have to get the UBI device to prevent its removal. in ubi_open_volume()
140 ubi = ubi_get_device(ubi_num); in ubi_open_volume()
141 if (!ubi) in ubi_open_volume()
144 if (vol_id < 0 || vol_id >= ubi->vtbl_slots) { in ubi_open_volume()
159 spin_lock(&ubi->volumes_lock); in ubi_open_volume()
160 vol = ubi->volumes[vol_id]; in ubi_open_volume()
193 spin_unlock(&ubi->volumes_lock); in ubi_open_volume()
198 mutex_lock(&ubi->ckvol_mutex); in ubi_open_volume()
201 err = ubi_check_volume(ubi, vol_id); in ubi_open_volume()
203 mutex_unlock(&ubi->ckvol_mutex); in ubi_open_volume()
208 ubi_warn(ubi, "volume %d on UBI device %d is corrupted", in ubi_open_volume()
209 vol_id, ubi->ubi_num); in ubi_open_volume()
214 mutex_unlock(&ubi->ckvol_mutex); in ubi_open_volume()
219 spin_unlock(&ubi->volumes_lock); in ubi_open_volume()
224 ubi_put_device(ubi); in ubi_open_volume()
225 ubi_err(ubi, "cannot open device %d, volume %d, error %d", in ubi_open_volume()
232 * ubi_open_volume_nm - open UBI volume by name.
233 * @ubi_num: UBI device number
243 struct ubi_device *ubi; in ubi_open_volume_nm() local
258 ubi = ubi_get_device(ubi_num); in ubi_open_volume_nm()
259 if (!ubi) in ubi_open_volume_nm()
262 spin_lock(&ubi->volumes_lock); in ubi_open_volume_nm()
263 /* Walk all volumes of this UBI device */ in ubi_open_volume_nm()
264 for (i = 0; i < ubi->vtbl_slots; i++) { in ubi_open_volume_nm()
265 struct ubi_volume *vol = ubi->volumes[i]; in ubi_open_volume_nm()
272 spin_unlock(&ubi->volumes_lock); in ubi_open_volume_nm()
280 * We should put the UBI device even in case of success, because in ubi_open_volume_nm()
283 ubi_put_device(ubi); in ubi_open_volume_nm()
290 * ubi_open_volume_path - open UBI volume by its character device node path.
328 * ubi_close_volume - close UBI volume.
334 struct ubi_device *ubi = vol->ubi; in ubi_close_volume() local
337 ubi->ubi_num, vol->vol_id, desc->mode); in ubi_close_volume()
339 spin_lock(&ubi->volumes_lock); in ubi_close_volume()
355 spin_unlock(&ubi->volumes_lock); in ubi_close_volume()
359 ubi_put_device(ubi); in ubi_close_volume()
378 struct ubi_device *ubi = vol->ubi; in leb_read_sanity_check() local
381 if (vol_id < 0 || vol_id >= ubi->vtbl_slots || lnum < 0 || in leb_read_sanity_check()
388 /* Empty static UBI volume */ in leb_read_sanity_check()
408 * @check: whether UBI has to check the read data's CRC or not.
432 struct ubi_device *ubi = vol->ubi; in ubi_leb_read() local
444 err = ubi_eba_read_leb(ubi, vol, lnum, buf, offset, len, check); in ubi_leb_read()
446 ubi_warn(ubi, "mark volume %d as corrupted", vol_id); in ubi_leb_read()
462 * @check: whether UBI has to check the read data's CRC or not.
465 * storing the read data into a buffer it writes to an UBI scatter gather
472 struct ubi_device *ubi = vol->ubi; in ubi_leb_read_sg() local
484 err = ubi_eba_read_leb_sg(ubi, vol, sgl, lnum, offset, len, check); in ubi_leb_read_sg()
486 ubi_warn(ubi, "mark volume %d as corrupted", vol_id); in ubi_leb_read_sg()
509 * write finishes. UBI has a pool of reserved physical eraseblocks for this.
512 * occurred and UBI has not been able to recover from it, this function returns
524 struct ubi_device *ubi = vol->ubi; in ubi_leb_write() local
529 if (vol_id < 0 || vol_id >= ubi->vtbl_slots) in ubi_leb_write()
537 offset & (ubi->min_io_size - 1) || len & (ubi->min_io_size - 1)) in ubi_leb_write()
546 return ubi_eba_write_leb(ubi, vol, lnum, buf, offset, len); in ubi_leb_write()
569 struct ubi_device *ubi = vol->ubi; in ubi_leb_change() local
574 if (vol_id < 0 || vol_id >= ubi->vtbl_slots) in ubi_leb_change()
581 len > vol->usable_leb_size || len & (ubi->min_io_size - 1)) in ubi_leb_change()
590 return ubi_eba_atomic_leb_change(ubi, vol, lnum, buf, len); in ubi_leb_change()
609 struct ubi_device *ubi = vol->ubi; in ubi_leb_erase() local
623 err = ubi_eba_unmap_leb(ubi, vol, lnum); in ubi_leb_erase()
627 return ubi_wl_flush(ubi, vol->vol_id, lnum); in ubi_leb_erase()
642 * eraseblock will contain all 0xFF bytes when UBI is initialized again. For
649 * In other words, when un-mapping a logical eraseblock, UBI does not store
651 * eraseblock as "un-mapped" in RAM. If UBI is detached before the physical
659 * UBI guarantees that the old contents has gone forever. In other words, if an
670 struct ubi_device *ubi = vol->ubi; in ubi_leb_unmap() local
683 return ubi_eba_unmap_leb(ubi, vol, lnum); in ubi_leb_unmap()
706 struct ubi_device *ubi = vol->ubi; in ubi_leb_map() local
722 return ubi_eba_write_leb(ubi, vol, lnum, NULL, 0, 0); in ubi_leb_map()
733 * mean it will still be un-mapped after the UBI device is re-attached. The
759 * ubi_sync - synchronize UBI device buffers.
760 * @ubi_num: UBI device to synchronize
768 struct ubi_device *ubi; in ubi_sync() local
770 ubi = ubi_get_device(ubi_num); in ubi_sync()
771 if (!ubi) in ubi_sync()
774 mtd_sync(ubi->mtd); in ubi_sync()
775 ubi_put_device(ubi); in ubi_sync()
781 * ubi_flush - flush UBI work queue.
782 * @ubi_num: UBI device to flush work queue
794 struct ubi_device *ubi; in ubi_flush() local
797 ubi = ubi_get_device(ubi_num); in ubi_flush()
798 if (!ubi) in ubi_flush()
801 err = ubi_wl_flush(ubi, vol_id, lnum); in ubi_flush()
802 ubi_put_device(ubi); in ubi_flush()
817 * 'nb->notifier_call()' will be invoked when an UBI volume is created,
821 * Using UBI API from the volume notifier is prohibited.
838 * We are going to walk all UBI devices and all volumes, and in ubi_register_volume_notifier()
840 * event. We have to lock the @ubi_devices_mutex to make sure UBI in ubi_register_volume_notifier()