• Kay Sievers's avatar
    loop: add management interface for on-demand device allocation · 770fe30a
    Kay Sievers authored
    Loop devices today have a fixed pre-allocated number of usually 8.
    The number can only be changed at module init time. To find a free
    device to use, /dev/loop%i needs to be scanned, and all devices need
    to be opened until a free one is possibly found.
    
    This adds a new /dev/loop-control device node, that allows to
    dynamically find or allocate a free device, and to add and remove loop
    devices from the running system:
     LOOP_CTL_ADD adds a specific device. Arg is the number
     of the device. It returns the device i or a negative
     error code.
    
     LOOP_CTL_REMOVE removes a specific device, Arg is the
     number the device. It returns the device i or a negative
     error code.
    
     LOOP_CTL_GET_FREE finds the next unbound device or allocates
     a new one. No arg is given. It returns the device i or a
     negative error code.
    
    The loop kernel module gets automatically loaded when
    /dev/loop-control is accessed the first time. The alias
    specified in the module, instructs udev to create this
    'dead' device node, even when the module is not loaded.
    
    Example:
     cfd = open("/dev/loop-control", O_RDWR);
    
     # add a new specific loop device
     err = ioctl(cfd, LOOP_CTL_ADD, devnr);
    
     # remove a specific loop device
     err = ioctl(cfd, LOOP_CTL_REMOVE, devnr);
    
     # find or allocate a free loop device to use
     devnr = ioctl(cfd, LOOP_CTL_GET_FREE);
    
     sprintf(loopname, "/dev/loop%i", devnr);
     ffd = open("backing-file", O_RDWR);
     lfd = open(loopname, O_RDWR);
     err = ioctl(lfd, LOOP_SET_FD, ffd);
    
    Cc: Tejun Heo <tj@kernel.org>
    Cc: Karel Zak  <kzak@redhat.com>
    Signed-off-by: default avatarKay Sievers <kay.sievers@vrfy.org>
    Signed-off-by: default avatarJens Axboe <jaxboe@fusionio.com>
    770fe30a
loop.c 45.3 KB