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

Reply via email to