From: yangsheng Date: Wed, 8 Jan 2014 11:44:15 +0000 (+0800) Subject: LU-4416 utils: loop_control device support X-Git-Tag: 2.5.57~45 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=603182184b50f777a942ebc84839a406cf7cbf5b;p=fs%2Flustre-release.git LU-4416 utils: loop_control device support FC19 use loop_control device since 3.12.5 kernel. Signed-off-by: yang sheng Change-Id: I40b241243507648b7dd9c6ddaf924c2324396e3f Reviewed-on: http://review.whamcloud.com/8799 Reviewed-by: Bob Glossman Tested-by: Jenkins Reviewed-by: Peng Tao Reviewed-by: James Simmons Tested-by: Maloo Reviewed-by: Oleg Drokin --- diff --git a/lustre/utils/mount_utils.c b/lustre/utils/mount_utils.c index 31cec4a..d754d49 100644 --- a/lustre/utils/mount_utils.c +++ b/lustre/utils/mount_utils.c @@ -46,6 +46,7 @@ #include #include #include +#include extern char *progname; extern int verbose; @@ -307,7 +308,8 @@ int loop_setup(struct mkfs_opts *mop) int i, ret = 0; /* Figure out the loop device names */ - if (!access("/dev/loop0", F_OK | R_OK)) { + if (!access("/dev/loop0", F_OK | R_OK) || + !access("/dev/loop-control", F_OK | R_OK)) { strcpy(loop_base, "/dev/loop\0"); } else if (!access("/dev/loop/0", F_OK | R_OK)) { strcpy(loop_base, "/dev/loop/\0"); @@ -321,9 +323,24 @@ int loop_setup(struct mkfs_opts *mop) char cmd[PATH_MAX]; int cmdsz = sizeof(cmd); +#ifdef LOOP_CTL_GET_FREE + ret = open("/dev/loop-control", O_RDWR); + if (ret < 0) { + fprintf(stderr, "%s: can't access loop control\n", progname); + return EACCES; + } + /* find or allocate a free loop device to use */ + i = ioctl(ret, LOOP_CTL_GET_FREE); + if (i < 0) { + fprintf(stderr, "%s: access loop control error\n", progname); + return EACCES; + } + sprintf(l_device, "%s%d", loop_base, i); +#else sprintf(l_device, "%s%d", loop_base, i); if (access(l_device, F_OK | R_OK)) break; +#endif snprintf(cmd, cmdsz, "losetup %s > /dev/null 2>&1", l_device); ret = system(cmd);