On Wed, 5 Nov 2025, John Garry wrote:
> This small series enables atomic writes support for dm-crypt.
>
> Apart from setting DM_TARGET_ATOMIC_WRITES flag, we need to make the
> following changes:
> - limit atomic write size to dm-crypt max write size
> - BUG_ON() any partial completions for when REQ_ATOMIC is set
>
> John Garry (2):
> dm: BUG on REQ_ATOMIC in dm_accept_partial_bio()
> dm-crypt: enable DM_TARGET_ATOMIC_WRITES
>
> drivers/md/dm-crypt.c | 21 +++++++++++++++++++--
> drivers/md/dm.c | 5 +++--
> 2 files changed, 22 insertions(+), 4 deletions(-)
>
> --
> 2.43.5
Hi
Thanks for the patches, I reworked them a bit.
Regarding the first patch - note that the device mapper stack may be
arbitrarily reconfigured, so it is possible that REQ_ATOMIC bio may be
sent to a target that doesn't support atomic writes - and this could
trigger the "BUG_ON(bio->bi_opf & REQ_ATOMIC);".
So, we need to reject atomic bios to targets that don't support them.
Regarding the second patch - max_write_size and
DM_CRYPT_DEFAULT_MAX_WRITE_SIZE is a performance hint that may be set
arbitrarily by the user (it was added after we discovered that too long
bios would not paralellize compression/decompression and it caused
performance regression) - so it shouldn't restrict the size of atomic
bios. The size of atomic bios should be restricted to "BIO_MAX_VECS <<
PAGE_SHIFT" - that is the hard limit.
dm-crypt already has logic to not split writes if ti->emulate_zone_append
is true - so I joined this logic with the REQ_ATOMIC logic.
I'll send updated patches, please test them.
Mikulas