[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <1612367638-3794-1-git-send-email-sergei.shtepa@veeam.com>
Date: Wed, 3 Feb 2021 18:53:52 +0300
From: Sergei Shtepa <sergei.shtepa@...am.com>
To: <Damien.LeMoal@....com>, <snitzer@...hat.com>, <hare@...e.de>,
<ming.lei@...hat.com>, <agk@...hat.com>, <corbet@....net>,
<axboe@...nel.dk>, <jack@...e.cz>, <johannes.thumshirn@....com>,
<gregkh@...uxfoundation.org>, <koct9i@...il.com>, <steve@....org>,
<dm-devel@...hat.com>, <linux-block@...r.kernel.org>,
<linux-doc@...r.kernel.org>, <linux-kernel@...r.kernel.org>
CC: <sergei.shtepa@...am.com>, <pavgel.tide@...am.com>
Subject: [PATCH v4 0/6] block-layer interposer
Hi all.
I'm ready to suggest the block-layer interposer (blk_interposer).
blk_interposer allows to intercept bio requests, remap bio to another
devices or add new bios.
This patch series adds support blk_interposer for dm-linear.
In the first patch, I suggest the remap_and_filter.rst file.
Yes, Mike, it's probably too early for documentation, but maybe it will be
interesting for someone. In the documentation I tried to explain
the purpose of blk_interposer and what prospects it opens up.
The second patch is dedicated to blk_interposer itself, which provides
the ability to intercept bio.
The third - adds the function blk_mq_is_queue_frozen(). It allows to
assert a queue state.
The fourth one adds support for blk_interposer from the device mapper.
Added ioctl DM_DEV_REMAP_CMD.
In the fifth - added the 'noexcl' option for dm-linear, which allows
to open the underlying block-device without the FMODE_EXCL mode.
This allows to create a dm device to which can redirect bio requests
using DM_DEV_REMAP_CMD.
Here I would like to discuss the implementation.
I don't like to play with flags. Adding the non_exclusive flags creates
an excessive complexity. An alternative solution is to explicitly specify
the FMODE_EXCL mode for each dm-target. The problem is that in this case,
we will have to change each dm-target. It doesn't look cool either.
The latest patch changes linear.rst with the description of the 'noexcl'
option that is added for dm-linear.
A little history of changes:
v4 - current patch set
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@veeam.com/
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@...hat.com.
* 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@veeam.com/
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@suse.de/
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@veeam.com/
I tried to offer a rather cumbersome blk-filter and a monster-like
blk-snap module for creating snapshots.
Thank you to everyone who was able to take the time to review
the previous versions.
I hope that this time I achieved the required quality.
Thanks,
Sergei.
Sergei Shtepa (6):
docs: device-mapper: add remap_and_filter
block: add blk_interposer
block: add blk_mq_is_queue_frozen()
dm: new ioctl DM_DEV_REMAP_CMD
dm: add 'noexcl' option for dm-linear
docs: device-mapper: 'noexcl' option for dm-linear
.../admin-guide/device-mapper/index.rst | 1 +
.../admin-guide/device-mapper/linear.rst | 26 +-
.../device-mapper/remap_and_filter.rst | 132 ++++++
block/bio.c | 2 +
block/blk-core.c | 33 ++
block/blk-mq.c | 13 +
block/genhd.c | 82 ++++
drivers/md/dm-core.h | 20 +
drivers/md/dm-ioctl.c | 39 ++
drivers/md/dm-linear.c | 14 +-
drivers/md/dm-table.c | 12 +-
drivers/md/dm.c | 400 +++++++++++++++++-
drivers/md/dm.h | 2 +-
include/linux/blk-mq.h | 1 +
include/linux/blk_types.h | 6 +-
include/linux/device-mapper.h | 7 +
include/linux/genhd.h | 18 +
include/uapi/linux/dm-ioctl.h | 15 +-
18 files changed, 792 insertions(+), 31 deletions(-)
create mode 100644 Documentation/admin-guide/device-mapper/remap_and_filter.rst
--
2.20.1
Powered by blists - more mailing lists