mirror of
https://github.com/torvalds/linux.git
synced 2025-08-15 14:11:42 +02:00
block: ensure discard_granularity is zero when discard is not supported
Documentation/ABI/stable/sysfs-block states:
What: /sys/block/<disk>/queue/discard_granularity
[...]
A discard_granularity of 0 means that the device does not support
discard functionality.
but this got broken when sorting out the block limits updates. Fix this
by setting the discard_granularity limit to zero when the combined
max_discard_sectors is zero.
Fixes: 3c407dc723
("block: default the discard granularity to sector size")
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
Link: https://lore.kernel.org/r/20250731152228.873923-1-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
765761851d
commit
fad6551fcf
1 changed files with 10 additions and 3 deletions
|
@ -400,12 +400,19 @@ int blk_validate_limits(struct queue_limits *lim)
|
|||
lim->max_discard_sectors =
|
||||
min(lim->max_hw_discard_sectors, lim->max_user_discard_sectors);
|
||||
|
||||
/*
|
||||
* When discard is not supported, discard_granularity should be reported
|
||||
* as 0 to userspace.
|
||||
*/
|
||||
if (lim->max_discard_sectors)
|
||||
lim->discard_granularity =
|
||||
max(lim->discard_granularity, lim->physical_block_size);
|
||||
else
|
||||
lim->discard_granularity = 0;
|
||||
|
||||
if (!lim->max_discard_segments)
|
||||
lim->max_discard_segments = 1;
|
||||
|
||||
if (lim->discard_granularity < lim->physical_block_size)
|
||||
lim->discard_granularity = lim->physical_block_size;
|
||||
|
||||
/*
|
||||
* By default there is no limit on the segment boundary alignment,
|
||||
* but if there is one it can't be smaller than the page size as
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue