[PATCH v9 0/4] block device interposer
From: Sergei Shtepa
Date: Wed Apr 21 2021 - 12:46:16 EST
A new version of a block device interposer (blk_interposer).
In this series of patches, I have tried to take into account the comments
made by Mike to the previous version.
First of all, this applies to more detailed explanations of the commits.
Indeed, the changes in blk-core.c and dm.c may seem complicated, but they
are no more complicated than the rest of the code in these files.
Removed the [interpose] option for block devices opened by the DM target.
Instead, the dm_get_device_ex() function is added, which allows to
explicitly specify which devices can be used for the interposer and which
can not.
Additional testing has revealed a problem with suspending and resuming DM
targets attached via blk_interposer. This has been fixed.
History:
v8 - https://patchwork.kernel.org/project/linux-block/cover/1617968884-15149-1-git-send-email-sergei.shtepa@xxxxxxxxx/
* The attaching and detaching to interposed device moved to
__dm_suspend() and __dm_resume() functions.
* Redesigned the submit_bio_noacct() function and added a lock for the
block device interposer.
* Adds [interpose] option to block device patch in dm table.
* Fix origin_map() then o->split_binary value is zero.
v7 - https://patchwork.kernel.org/project/linux-block/cover/1615563895-28565-1-git-send-email-sergei.shtepa@xxxxxxxxx/
* the request interception mechanism. Now the interposer is
a block device that receives requests instead of the original device;
* code design fixes.
v6 - https://patchwork.kernel.org/project/linux-block/cover/1614774618-22410-1-git-send-email-sergei.shtepa@xxxxxxxxx/
* designed for 5.12;
* thanks to the new design of the bio structure in v5.12, it is
possible to perform interception not for the entire disk, but
for each block device;
* instead of the new ioctl DM_DEV_REMAP_CMD and the 'noexcl' option,
the DM_INTERPOSED_FLAG flag for the ioctl DM_TABLE_LOAD_CMD is
applied.
v5 - https://patchwork.kernel.org/project/linux-block/cover/1612881028-7878-1-git-send-email-sergei.shtepa@xxxxxxxxx/
* rebase for v5.11-rc7;
* patch set organization;
* fix defects in documentation;
* add some comments;
* change mutex names for better code readability;
* remove calling bd_unlink_disk_holder() for targets with non-exclusive
flag;
* change type for struct dm_remap_param from uint8_t to __u8.
v4 - https://patchwork.kernel.org/project/linux-block/cover/1612367638-3794-1-git-send-email-sergei.shtepa@xxxxxxxxx/
Mostly changes were made, due to Damien's comments:
* on the design of the code;
* by the patch set organization;
* bug with passing a wrong parameter to dm_get_device();
* description of the 'noexcl' parameter in the linear.rst.
Also added remap_and_filter.rst.
v3 - https://patchwork.kernel.org/project/linux-block/cover/1611853955-32167-1-git-send-email-sergei.shtepa@xxxxxxxxx/
In this version, I already suggested blk_interposer to apply to dm-linear.
Problems were solved:
* Interception of bio requests from a specific device on the disk, not
from the entire disk. To do this, we added the dm_interposed_dev
structure and an interval tree to store these structures.
* Implemented ioctl DM_DEV_REMAP_CMD. A patch with changes in the lvm2
project was sent to the team lvm-devel@xxxxxxxxxx.
* Added the 'noexcl' option for dm-linear, which allows you to open
the underlying block-device without FMODE_EXCL mode.
v2 - https://patchwork.kernel.org/project/linux-block/cover/1607518911-30692-1-git-send-email-sergei.shtepa@xxxxxxxxx/
I tried to suggest blk_interposer without using it in device mapper,
but with the addition of a sample of its use. It was then that I learned
about the maintainers' attitudes towards the samples directory :).
v1 - https://lwn.net/ml/linux-block/20201119164924.74401-1-hare@xxxxxxx/
This Hannes's patch can be considered as a starting point, since this is
where the interception mechanism and the term blk_interposer itself
appeared. It became clear that blk_interposer can be useful for
device mapper.
before v1 - https://patchwork.kernel.org/project/linux-block/cover/1603271049-20681-1-git-send-email-sergei.shtepa@xxxxxxxxx/
I tried to offer a rather cumbersome blk-filter and a monster-like
blk-snap module for creating snapshots.
Sergei Shtepa (4):
Adds blk_interposer
Applying the blk_interposer in the block device layer
Add blk_interposer in DM
Using dm_get_device_ex() instead of dm_get_device()
block/bio.c | 2 +
block/blk-core.c | 194 ++++++++++++++-------------
block/genhd.c | 52 ++++++++
drivers/md/dm-cache-target.c | 5 +-
drivers/md/dm-core.h | 1 +
drivers/md/dm-delay.c | 3 +-
drivers/md/dm-dust.c | 3 +-
drivers/md/dm-era-target.c | 4 +-
drivers/md/dm-flakey.c | 3 +-
drivers/md/dm-ioctl.c | 59 ++++++++-
drivers/md/dm-linear.c | 3 +-
drivers/md/dm-log-writes.c | 3 +-
drivers/md/dm-snap.c | 3 +-
drivers/md/dm-table.c | 21 ++-
drivers/md/dm-writecache.c | 3 +-
drivers/md/dm.c | 242 ++++++++++++++++++++++++++++++----
drivers/md/dm.h | 8 +-
fs/block_dev.c | 3 +
include/linux/blk_types.h | 6 +
include/linux/blkdev.h | 32 +++++
include/linux/device-mapper.h | 11 +-
include/uapi/linux/dm-ioctl.h | 6 +
22 files changed, 530 insertions(+), 137 deletions(-)
--
2.20.1