mbox series

[v2,0/5] Add a new LOOPSET_FD_AND_STATUS ioctl

Message ID 20200422100636.46357-1-maco@android.com (mailing list archive)
Headers show
Series Add a new LOOPSET_FD_AND_STATUS ioctl | expand

Message

Martijn Coenen April 22, 2020, 10:06 a.m. UTC
This series introduces a new ioctl that makes it possible to atomically
configure a loop device. Previously, if you wanted to set parameters
such as the offset on a loop device, this required calling LOOP_SET_FD
to set the backing file, and then LOOP_SET_STATUS to set the offset.
However, in between these two calls, the loop device is available and
would accept requests, which is generally not desirable.

There are also performance benefits with combining these two ioctls into
one, which are described in more detail in the last change in the
series.

Note that this series depends on
"loop: Call loop_config_discard() only after new config is applied."
[0], which I sent as a separate patch as it fixes an unrelated bug.

[0]: https://lkml.org/lkml/2020/3/31/755

---
v2:
  - Addressed review comments from Bart van Assche:
    -- Use SECTOR_SHIFT constant
    -- Renamed loop_set_from_status() to loop_set_status_from_info()
    -- Added kerneldoc for loop_set_status_from_info()
    -- Removed dots in patch subject lines
  - Addressed review comments from Christoph Hellwig:
    -- Added missing padding in struct loop_fd_and_status
    -- Cleaned up some __user pointer handling in lo_ioctl
    -- Pass in a stack-initialized loop_info64 for the legacy
       LOOP_SET_FD case

Martijn Coenen (5):
  loop: Refactor size calculation
  loop: Factor out configuring loop from status
  loop: Move loop_set_status_from_info() and friends up
  loop: rework lo_ioctl() __user argument casting
  loop: Add LOOP_SET_FD_AND_STATUS ioctl

 drivers/block/loop.c      | 327 ++++++++++++++++++++++----------------
 include/uapi/linux/loop.h |   7 +
 2 files changed, 201 insertions(+), 133 deletions(-)