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