Skip to content

Commit

Permalink
Use /dev/loop-control if it exists
Browse files Browse the repository at this point in the history
Loop devices can be added on the fly when needed, they're
not always created beforehand. The loop-control device can
be used to find and allocate the next available number
instead of going through the /dev directory contents (which
is now only a fallback mechanism).

Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
  • Loading branch information
Blub committed Jul 3, 2015
1 parent 814d049 commit edd7414
Showing 1 changed file with 21 additions and 1 deletion.
22 changes: 21 additions & 1 deletion src/lxc/bdev.c
Expand Up @@ -1868,7 +1868,7 @@ static int loop_detect(const char *path)
return 0;
}

static int find_free_loopdev(int *retfd, char *namep)
static int find_free_loopdev_no_control(int *retfd, char *namep)
{
struct dirent dirent, *direntp;
struct loop_info64 lo;
Expand Down Expand Up @@ -1908,6 +1908,26 @@ static int find_free_loopdev(int *retfd, char *namep)
return 0;
}

static int find_free_loopdev(int *retfd, char *namep)
{
int rc, fd = -1;
int ctl = open("/dev/loop-control", O_RDWR);
if (ctl < 0)
return find_free_loopdev_no_control(retfd, namep);
rc = ioctl(ctl, LOOP_CTL_GET_FREE);
if (rc >= 0) {
snprintf(namep, 100, "/dev/loop%d", rc);
fd = open(namep, O_RDWR);
}
close(ctl);
if (fd == -1) {
ERROR("No loop device found");
return -1;
}
*retfd = fd;
return 0;
}

static int loop_mount(struct bdev *bdev)
{
int lfd, ffd = -1, ret = -1;
Expand Down

0 comments on commit edd7414

Please sign in to comment.