mirror of
https://git.proxmox.com/git/mirror_lxc
synced 2025-08-10 08:17:46 +00:00
Use /dev/loop-control if it exists
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>
This commit is contained in:
parent
814d049da4
commit
edd7414a64
@ -1868,7 +1868,7 @@ static int loop_detect(const char *path)
|
|||||||
return 0;
|
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 dirent dirent, *direntp;
|
||||||
struct loop_info64 lo;
|
struct loop_info64 lo;
|
||||||
@ -1908,6 +1908,26 @@ static int find_free_loopdev(int *retfd, char *namep)
|
|||||||
return 0;
|
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)
|
static int loop_mount(struct bdev *bdev)
|
||||||
{
|
{
|
||||||
int lfd, ffd = -1, ret = -1;
|
int lfd, ffd = -1, ret = -1;
|
||||||
|
Loading…
Reference in New Issue
Block a user