On Wed, Jan 31, 2024 at 02:03:51PM +0100, Christoph Hellwig wrote: > static ssize_t queue_discard_max_store(struct request_queue *q, > const char *page, size_t count) > { > - unsigned long max_discard; > - ssize_t ret = queue_var_store(&max_discard, page, count); > + unsigned long max_discard_bytes; > + ssize_t ret; > > + ret = queue_var_store(&max_discard_bytes, page, count); > if (ret < 0) > return ret; > > - if (max_discard & (q->limits.discard_granularity - 1)) > + if (max_discard_bytes & (q->limits.discard_granularity - 1)) > return -EINVAL; > > - max_discard >>= 9; > - if (max_discard > UINT_MAX) > + if ((max_discard_bytes >> SECTOR_SHIFT) > UINT_MAX) > return -EINVAL; > > - if (max_discard > q->limits.max_hw_discard_sectors) > - max_discard = q->limits.max_hw_discard_sectors; > - > - q->limits.max_discard_sectors = max_discard; > + q->limits.max_user_discard_sectors = max_discard_bytes >> SECTOR_SHIFT; > + q->limits.max_discard_sectors = > + min_not_zero(q->limits.max_hw_discard_sectors, > + q->limits.max_user_discard_sectors); s/min_not_zero/min Otherwise the whole series looks pretty good! And with that: Reviewed-by: Keith Busch <kbusch@xxxxxxxxxx>