]> git.baikalelectronics.ru Git - kernel.git/commit
block: loop: set discard granularity and alignment for block device backed loop
authorMing Lei <ming.lei@redhat.com>
Mon, 17 Aug 2020 10:01:30 +0000 (18:01 +0800)
committerJens Axboe <axboe@kernel.dk>
Mon, 17 Aug 2020 13:58:36 +0000 (06:58 -0700)
commitb06b5f5a7a98f5e57c118887da24bfbe84bbc151
tree37bafa8348d4fbbddcdbc024c57202022fa222a6
parent1eb7f5bad749bc2e90895e18fc854f3838fe3ab8
block: loop: set discard granularity and alignment for block device backed loop

In case of block device backend, if the backend supports write zeros, the
loop device will set queue flag of QUEUE_FLAG_DISCARD. However,
limits.discard_granularity isn't setup, and this way is wrong,
see the following description in Documentation/ABI/testing/sysfs-block:

A discard_granularity of 0 means that the device does not support
discard functionality.

Especially 9797b18e0418 ("block: improve discard bio alignment in
__blkdev_issue_discard()") starts to take q->limits.discard_granularity
for computing max discard sectors. And zero discard granularity may cause
kernel oops, or fail discard request even though the loop queue claims
discard support via QUEUE_FLAG_DISCARD.

Fix the issue by setup discard granularity and alignment.

Fixes: e7e22b1c3716 ("loop: Better discard support for block devices")
Signed-off-by: Ming Lei <ming.lei@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Acked-by: Coly Li <colyli@suse.de>
Cc: Hannes Reinecke <hare@suse.com>
Cc: Xiao Ni <xni@redhat.com>
Cc: Martin K. Petersen <martin.petersen@oracle.com>
Cc: Evan Green <evgreen@chromium.org>
Cc: Gwendal Grignou <gwendal@chromium.org>
Cc: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Cc: Andrzej Pietrasiewicz <andrzej.p@collabora.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: <stable@vger.kernel.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/block/loop.c