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)? -- Martin K. Petersen Oracle Linux Engineering