From: Karel Zak Date: Tue, 15 May 2018 11:08:47 +0000 (+0200) Subject: lib/loopdev: use new ul_path_* API X-Git-Tag: v2.33-rc1~201 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7604f85fb649a271ca57687d009cd3c02e5dc4ea;p=thirdparty%2Futil-linux.git lib/loopdev: use new ul_path_* API Signed-off-by: Karel Zak --- diff --git a/include/loopdev.h b/include/loopdev.h index 121fb846bd..3f2cec5f5d 100644 --- a/include/loopdev.h +++ b/include/loopdev.h @@ -103,12 +103,12 @@ struct loopdev_cxt { unsigned int info_failed:1; /* LOOP_GET_STATUS ioctl failed */ unsigned int control_ok:1; /* /dev/loop-control success */ - struct sysfs_cxt sysfs; /* pointer to /sys/dev/block// */ + struct path_cxt *sysfs; /* pointer to /sys/dev/block// */ struct loop_info64 info; /* for GET/SET ioctl */ struct loopdev_iter iter; /* scans /sys or /dev for used/free devices */ }; -#define UL_LOOPDEVCXT_EMPTY { .fd = -1, .sysfs = UL_SYSFSCXT_EMPTY } +#define UL_LOOPDEVCXT_EMPTY { .fd = -1 } /* * loopdev_cxt.flags @@ -154,7 +154,6 @@ extern int loopcxt_has_device(struct loopdev_cxt *lc); extern int loopcxt_add_device(struct loopdev_cxt *lc); extern char *loopcxt_strdup_device(struct loopdev_cxt *lc); extern const char *loopcxt_get_device(struct loopdev_cxt *lc); -extern struct sysfs_cxt *loopcxt_get_sysfs(struct loopdev_cxt *lc); extern struct loop_info64 *loopcxt_get_info(struct loopdev_cxt *lc); extern int loopcxt_get_fd(struct loopdev_cxt *lc); diff --git a/lib/loopdev.c b/lib/loopdev.c index 54d337ea3a..0e2e988656 100644 --- a/lib/loopdev.c +++ b/lib/loopdev.c @@ -123,7 +123,8 @@ int loopcxt_set_device(struct loopdev_cxt *lc, const char *device) DBG(CXT, ul_debugobj(lc, "%s name assigned", device)); } - sysfs_deinit(&lc->sysfs); + ul_unref_path(lc->sysfs); + lc->sysfs = NULL; return 0; } @@ -244,24 +245,24 @@ const char *loopcxt_get_device(struct loopdev_cxt *lc) * * Returns pointer to the sysfs context (see lib/sysfs.c) */ -struct sysfs_cxt *loopcxt_get_sysfs(struct loopdev_cxt *lc) +static struct path_cxt *loopcxt_get_sysfs(struct loopdev_cxt *lc) { if (!lc || !*lc->device || (lc->flags & LOOPDEV_FL_NOSYSFS)) return NULL; - if (!lc->sysfs.devno) { - dev_t devno = sysfs_devname_to_devno(lc->device, NULL); + if (!lc->sysfs) { + dev_t devno = sysfs_devname_to_devno(lc->device); if (!devno) { DBG(CXT, ul_debugobj(lc, "sysfs: failed devname to devno")); return NULL; } - if (sysfs_init(&lc->sysfs, devno, NULL)) { + + lc->sysfs = ul_new_sysfs_path(devno, NULL, NULL); + if (!lc->sysfs) DBG(CXT, ul_debugobj(lc, "sysfs: init failed")); - return NULL; - } } - return &lc->sysfs; + return lc->sysfs; } /* @@ -686,7 +687,7 @@ struct loop_info64 *loopcxt_get_info(struct loopdev_cxt *lc) */ char *loopcxt_get_backing_file(struct loopdev_cxt *lc) { - struct sysfs_cxt *sysfs = loopcxt_get_sysfs(lc); + struct path_cxt *sysfs = loopcxt_get_sysfs(lc); char *res = NULL; if (sysfs) @@ -694,7 +695,7 @@ char *loopcxt_get_backing_file(struct loopdev_cxt *lc) * This is always preffered, the loop_info64 * has too small buffer for the filename. */ - res = sysfs_strdup(sysfs, "loop/backing_file"); + ul_path_read_string(sysfs, &res, "loop/backing_file"); if (!res && loopcxt_ioctl_enabled(lc)) { struct loop_info64 *lo = loopcxt_get_info(lc); @@ -718,11 +719,11 @@ char *loopcxt_get_backing_file(struct loopdev_cxt *lc) */ int loopcxt_get_offset(struct loopdev_cxt *lc, uint64_t *offset) { - struct sysfs_cxt *sysfs = loopcxt_get_sysfs(lc); + struct path_cxt *sysfs = loopcxt_get_sysfs(lc); int rc = -EINVAL; if (sysfs) - rc = sysfs_read_u64(sysfs, "loop/offset", offset); + rc = ul_path_read_u64(sysfs, offset, "loop/offset"); if (rc && loopcxt_ioctl_enabled(lc)) { struct loop_info64 *lo = loopcxt_get_info(lc); @@ -746,11 +747,11 @@ int loopcxt_get_offset(struct loopdev_cxt *lc, uint64_t *offset) */ int loopcxt_get_blocksize(struct loopdev_cxt *lc, uint64_t *blocksize) { - struct sysfs_cxt *sysfs = loopcxt_get_sysfs(lc); + struct path_cxt *sysfs = loopcxt_get_sysfs(lc); int rc = -EINVAL; if (sysfs) - rc = sysfs_read_u64(sysfs, "queue/logical_block_size", blocksize); + rc = ul_path_read_u64(sysfs, blocksize, "queue/logical_block_size"); /* Fallback based on BLKSSZGET ioctl */ if (rc) { @@ -778,11 +779,11 @@ int loopcxt_get_blocksize(struct loopdev_cxt *lc, uint64_t *blocksize) */ int loopcxt_get_sizelimit(struct loopdev_cxt *lc, uint64_t *size) { - struct sysfs_cxt *sysfs = loopcxt_get_sysfs(lc); + struct path_cxt *sysfs = loopcxt_get_sysfs(lc); int rc = -EINVAL; if (sysfs) - rc = sysfs_read_u64(sysfs, "loop/sizelimit", size); + rc = ul_path_read_u64(sysfs, size, "loop/sizelimit"); if (rc && loopcxt_ioctl_enabled(lc)) { struct loop_info64 *lo = loopcxt_get_info(lc); @@ -927,12 +928,12 @@ int loopmod_supports_partscan(void) */ int loopcxt_is_partscan(struct loopdev_cxt *lc) { - struct sysfs_cxt *sysfs = loopcxt_get_sysfs(lc); + struct path_cxt *sysfs = loopcxt_get_sysfs(lc); if (sysfs) { /* kernel >= 3.2 */ int fl; - if (sysfs_read_int(sysfs, "loop/partscan", &fl) == 0) + if (ul_path_read_s32(sysfs, &fl, "loop/partscan") == 0) return fl; } @@ -947,11 +948,11 @@ int loopcxt_is_partscan(struct loopdev_cxt *lc) */ int loopcxt_is_autoclear(struct loopdev_cxt *lc) { - struct sysfs_cxt *sysfs = loopcxt_get_sysfs(lc); + struct path_cxt *sysfs = loopcxt_get_sysfs(lc); if (sysfs) { int fl; - if (sysfs_read_int(sysfs, "loop/autoclear", &fl) == 0) + if (ul_path_read_s32(sysfs, &fl, "loop/autoclear") == 0) return fl; } @@ -970,11 +971,11 @@ int loopcxt_is_autoclear(struct loopdev_cxt *lc) */ int loopcxt_is_readonly(struct loopdev_cxt *lc) { - struct sysfs_cxt *sysfs = loopcxt_get_sysfs(lc); + struct path_cxt *sysfs = loopcxt_get_sysfs(lc); if (sysfs) { int fl; - if (sysfs_read_int(sysfs, "ro", &fl) == 0) + if (ul_path_read_s32(sysfs, &fl, "ro") == 0) return fl; } @@ -993,11 +994,11 @@ int loopcxt_is_readonly(struct loopdev_cxt *lc) */ int loopcxt_is_dio(struct loopdev_cxt *lc) { - struct sysfs_cxt *sysfs = loopcxt_get_sysfs(lc); + struct path_cxt *sysfs = loopcxt_get_sysfs(lc); if (sysfs) { int fl; - if (sysfs_read_int(sysfs, "loop/dio", &fl) == 0) + if (ul_path_read_s32(sysfs, &fl, "loop/dio") == 0) return fl; } if (loopcxt_ioctl_enabled(lc)) {