Martin,

On 9/1/17 12:36, Martin K. Petersen wrote:
> 
> Damien,
> 
>> +    if (sdkp->max_ws_blocks &&
>> +        sdkp->physical_block_size > logical_block_size) {
>> +            /*
>> +             * Reporting a maximum number of blocks that is not aligned
>> +             * on the device physical size would cause a large write same
>> +             * request to be split into physically unaligned chunks by
>> +             * __blkdev_issue_write_zeroes() and __blkdev_issue_write_same()
>> +             * even if the caller of these functions took care to align the
>> +             * large request. So make sure the maximum reported is aligned
>> +             * to the device physical block size. This is only an optional
>> +             * optimization for regular disks, but this is mandatory to
>> +             * avoid failure of large write same requests directed at
>> +             * sequential write required zones of host-managed ZBC disks.
>> +             */
>> +            sector_t phys_mask =
>> +                    bytes_to_logical(sdkp->device,
>> +                                     sdkp->physical_block_size) - 1;
>> +
>> +            sdkp->max_ws_blocks &= ~phys_mask;
>> +    }
>> +
>>  out:
>>      blk_queue_max_write_same_sectors(q, sdkp->max_ws_blocks *
>>                                       (logical_block_size >> 9));
> 
> ALIGN_DOWN(sdkp->max_ws_blocks, sdkp->physical_block_size)?

Sure. But let's use the same unit then :)

sdkp->max_ws_blocks =
        ALIGN_DOWN(sdkp->max_ws_blocks,
           bytes_to_logical(sdkp->device, sdkp->physical_block_size));

Isn't it ?

Do you want me to resend ?

Thank you.

-- 
Damien Le Moal,
Western Digital

Reply via email to