On 6/25/25 23:03, Mikulas Patocka wrote: > > > On Wed, 25 Jun 2025, Damien Le Moal wrote: > >> On 6/25/25 19:19, Mikulas Patocka wrote: >>> >>> >>> On Wed, 25 Jun 2025, Damien Le Moal wrote: >>> >>>> + bool wrt = op_is_write(bio_op(bio)); >>>> + >>>> + if (wrt) { >>>> + /* >>>> + * For zoned devices, splitting write operations creates the >>>> + * risk of deadlocking queue freeze operations with zone write >>>> + * plugging BIO work when the reminder of a split BIO is >>>> + * issued. So always allow the entire BIO to proceed. >>>> + */ >>>> + if (ti->emulate_zone_append) >>>> + return bio_sectors(bio); >>> >>> The overrun may still happen (if the user changes the dm table while some >>> bio is in progress) and if it happens, you should terminate the bio with >>> DM_MAPIO_KILL (like it was in my original patch). >> >> I am confused... Overrun against what ? We are now completely ignoring the >> max_write_size limit so even if the user changes it, that will not affect the >> BIO processing. If you are referring to an overrun against the zoned device >> max_hw_sectors limit, it is not possible since changing limits is done with >> the >> DM device queue frozen, so we are guaranteed that there will be no BIO >> in-flight. >> >> I am not sure about what kind of table change you are thinking of, but at the >> very least, dm_table_supports_size_change() ensure that there cannot be any >> device size change for a zoned DM device. And given the above point about >> limits >> changes, I do not see how a table change can affect the BIO execution. >> >> Do you have a specific example in mind ? > > What happens if a bio that is larger than "BIO_MAX_VECS << PAGE_SHIFT" > enters dm_split_and_process_bio? Where will the bio be split? I don't see > it, but maybe I'm missing something.
See patch 3 of the v3 I sent: dm_zone_bio_needs_split() and dm_split_and_process_bio() have been modified to always endup with need_split == true for zone write BIOs, and that causes a call to bio_split_to_limits(). So dm-crypt will always see BIOs that are smaller than limits->max_hw_sectors, which is set to BIO_MAX_VECS << PAGE_SECTORS_SHIFT in dm-crypt io_hint. So dm-crypt can never see a write BIO that is larger than BIO_MAX_VECS << PAGE_SHIFT. > > Mikulas > -- Damien Le Moal Western Digital Research