On 2025/6/13 22:54, Darrick J. Wong wrote: > On Fri, Jun 13, 2025 at 07:56:30AM +0200, Christoph Hellwig wrote: >> On Fri, Jun 13, 2025 at 11:15:41AM +0800, Zhang Yi wrote: >>> Yeah, this solution looks good to me. However, we currently have only >>> two selections (none and unmap). What if we keep it as is and simply >>> hide this interface if BLK_FEAT_WRITE_ZEROES_UNMAP is not set, making >>> it visible only when the device supports this feature? Something like >>> below: >> >> I really hate having all kinds of different interfaces for configurations. > > I really hate the open-coded string parsing nonsense that is sysfs. ;) > >> Maybe we should redo this similar to the other hardware/software interfaces >> and have a hw_ limit that is exposed by the driver and re-only in >> sysfs, and then the user configurable one without _hw. Setting it to >> zero disables the feature. > > Yeah, that fits the /sys/block/foo/queue model better. >
OK, well. Please let me confirm, are you both suggesting adding max_hw_write_zeores_unmap_sectors and max_write_zeroes_unmap_sectors to the queue_limits instead of adding BLK_FEAT_WRITE_ZEROES_UNMAP to the queue_limits->features. Something like the following. diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 378d3a1a22fc..14394850863c 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h @@ -376,7 +376,9 @@ struct queue_limits { unsigned int max_hw_discard_sectors; unsigned int max_user_discard_sectors; unsigned int max_secure_erase_sectors; - unsigned int max_write_zeroes_sectors; + unsigned int max_hw_write_zeroes_sectors; + unsigned int max_hw_write_zeores_unmap_sectors; + unsigned int max_write_zeroes_unmap_sectors; unsigned int max_hw_zone_append_sectors; unsigned int max_zone_append_sectors; unsigned int discard_granularity; Besides, we should also rename max_write_zeroes_sectors to max_hw_write_zeroes_sectors since it is a hardware limitation reported by the driver. If the device supports unmap write zeroes, max_hw_write_zeores_unmap_sectors should be equal to max_hw_write_zeroes_sectors, otherwise it should be 0. Right? Best regards, Yi.