diff options
| author | Manuel Bentele | 2020-12-02 07:07:44 +0100 |
|---|---|---|
| committer | Manuel Bentele | 2020-12-02 07:07:44 +0100 |
| commit | cbdb5025a3127d20a1e18a14bbcb0cc17be84710 (patch) | |
| tree | 6df46d1e538691cee1b34fba55d6466253d198e2 /src/utils/include | |
| parent | Add Linux kernel module support for 32-bit architectures (eg. ARM) (diff) | |
| download | xloop-cbdb5025a3127d20a1e18a14bbcb0cc17be84710.tar.gz xloop-cbdb5025a3127d20a1e18a14bbcb0cc17be84710.tar.xz xloop-cbdb5025a3127d20a1e18a14bbcb0cc17be84710.zip | |
Setup xloop device with XLOOP_CONFIGURE ioctl call
This feature allows the userspace tool xlosetup to completely setup a
loop device with a single ioctl call, removing the in-between state
where the device can be partially configured, eg. the loop device has
a backing file associated with it, but is reading from the wrong offset.
Besides removing the intermediate state, another big benefit of this
ioctl is that XLOOP_SET_STATUS can be slow. The main reason for this
slowness is that XLOOP_SET_STATUS(64) calls blk_mq_freeze_queue() to
freeze the associated queue. This requires waiting for RCU.
Diffstat (limited to 'src/utils/include')
| -rw-r--r-- | src/utils/include/loopdev.h | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/utils/include/loopdev.h b/src/utils/include/loopdev.h index 0221e6b..9fa0688 100644 --- a/src/utils/include/loopdev.h +++ b/src/utils/include/loopdev.h @@ -75,6 +75,19 @@ struct loop_info64 { uint32_t lo_file_fmt_type; }; +#ifndef LOOP_CONFIGURE +/* + * Since Linux v5.8-rc1 (commit 3448914e8cc550ba792d4ccc74471d1ca4293aae) + */ +# define LOOP_CONFIGURE 0x4C0A +struct loop_config { + uint32_t fd; + uint32_t block_size; + struct loop_info64 info; + uint64_t __reserved[8]; +}; +#endif + #define LOOPDEV_MAJOR XLOOP_MAJOR /* loop major number */ #define LOOPDEV_DEFAULT_NNODES CONFIG_BLK_DEV_XLOOP_MIN_COUNT /* default number of loop devices */ @@ -114,7 +127,7 @@ struct loopdev_cxt { unsigned int control_ok:1; /* /dev/loop-control success */ struct path_cxt *sysfs; /* pointer to /sys/dev/block/<maj:min>/ */ - struct loop_info64 info; /* for GET/SET ioctl */ + struct loop_config config; /* for GET/SET ioctl */ struct loopdev_iter iter; /* scans /sys or /dev for used/free devices */ }; |
