From d347635e3d8006f538f7b2719f12102a06747db8 Mon Sep 17 00:00:00 2001 From: Artem Bityutskiy Date: Fri, 25 Jan 2008 16:43:07 +0200 Subject: libubi: support atomic LEB change ioctl And add testing for this feature. Signed-off-by: Artem Bityutskiy --- ubi-utils/include/libubi.h | 19 +++++++++++++++++-- ubi-utils/src/libubi.c | 15 +++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) (limited to 'ubi-utils') diff --git a/ubi-utils/include/libubi.h b/ubi-utils/include/libubi.h index 61d886f..5f75108 100644 --- a/ubi-utils/include/libubi.h +++ b/ubi-utils/include/libubi.h @@ -146,7 +146,7 @@ struct ubi_dev_info * @rsvd_bytes: how many bytes are reserved for this volume * @rsvd_lebs: how many logical eraseblocks are reserved for this volume * @leb_size: logical eraseblock size of this volume (may be less then - * device's logical eraseblock size due to alignment) + * device's logical eraseblock size due to alignment) * @corrupted: non-zero if the volume is corrupted * @name: volume name (null-terminated) */ @@ -329,10 +329,25 @@ int ubi_get_vol_info1(libubi_t desc, int dev_num, int vol_id, * @bytes: how many bytes will be written to the volume * * This function initiates UBI volume update and returns %0 in case of success - * and %-1 in case of error. + * and %-1 in case of error. The caller is assumed to write @bytes data to the + * volume @fd afterwards. */ int ubi_update_start(libubi_t desc, int fd, long long bytes); +/** + * ubi_update_start - start atomic LEB change. + * @desc: UBI library descriptor + * @fd: volume character devie file descriptor + * @lnum: LEB number to change + * @bytes: how many bytes of new data will be written to the LEB + * @dtype: data type (%UBI_LONGTERM, %UBI_SHORTTERM, %UBI_UNKNOWN) + * + * This function initiates atomic LEB change operation and returns %0 in case + * of success and %-1 in case of error. he caller is assumed to write @bytes + * data to the volume @fd afterwards. + */ +int ubi_leb_change_start(libubi_t desc, int fd, int lnum, int bytes, int dtype); + #ifdef __cplusplus } #endif diff --git a/ubi-utils/src/libubi.c b/ubi-utils/src/libubi.c index be06f70..023fa07 100644 --- a/ubi-utils/src/libubi.c +++ b/ubi-utils/src/libubi.c @@ -1012,6 +1012,21 @@ int ubi_update_start(libubi_t desc, int fd, long long bytes) return 0; } +int ubi_leb_change_start(libubi_t desc, int fd, int lnum, int bytes, int dtype) +{ + struct ubi_leb_change_req req; + + desc = desc; + memset(&req, 0, sizeof(struct ubi_leb_change_req)); + req.lnum = lnum; + req.bytes = bytes; + req.dtype = dtype; + + if (ioctl(fd, UBI_IOCEBCH, &req)) + return -1; + return 0; +} + int ubi_get_dev_info1(libubi_t desc, int dev_num, struct ubi_dev_info *info) { DIR *sysfs_ubi; -- cgit v1.2.3