On 4/6/22 2:05 PM, Christoph Hellwig wrote:
Add a helper to query the number of sectors support per each discard bio
based on the block device and use this helper to stop various places from
poking into the request_queue to see if discard is supported and if so how
much. This mirrors what is done e.g. for write zeroes as well.
Signed-off-by: Christoph Hellwig <hch@xxxxxx>
For the bcache part,
Acked-by: Coly Li <colyli@xxxxxxx>
Thanks.
Coly Li
---
block/blk-core.c | 2 +-
block/blk-lib.c | 2 +-
block/ioctl.c | 3 +--
drivers/block/drbd/drbd_main.c | 2 +-
drivers/block/drbd/drbd_nl.c | 12 +++++++-----
drivers/block/drbd/drbd_receiver.c | 5 ++---
drivers/block/loop.c | 9 +++------
drivers/block/rnbd/rnbd-srv-dev.h | 6 +-----
drivers/block/xen-blkback/xenbus.c | 2 +-
drivers/md/bcache/request.c | 4 ++--
drivers/md/bcache/super.c | 2 +-
drivers/md/bcache/sysfs.c | 2 +-
drivers/md/dm-cache-target.c | 9 +--------
drivers/md/dm-clone-target.c | 9 +--------
drivers/md/dm-io.c | 2 +-
drivers/md/dm-log-writes.c | 3 +--
drivers/md/dm-raid.c | 9 ++-------
drivers/md/dm-table.c | 4 +---
drivers/md/dm-thin.c | 9 +--------
drivers/md/dm.c | 2 +-
drivers/md/md-linear.c | 4 ++--
drivers/md/raid0.c | 2 +-
drivers/md/raid1.c | 6 +++---
drivers/md/raid10.c | 8 ++++----
drivers/md/raid5-cache.c | 2 +-
drivers/target/target_core_device.c | 8 +++-----
fs/btrfs/extent-tree.c | 4 ++--
fs/btrfs/ioctl.c | 2 +-
fs/exfat/file.c | 2 +-
fs/exfat/super.c | 10 +++-------
fs/ext4/ioctl.c | 10 +++-------
fs/ext4/super.c | 10 +++-------
fs/f2fs/f2fs.h | 3 +--
fs/f2fs/segment.c | 6 ++----
fs/fat/file.c | 2 +-
fs/fat/inode.c | 10 +++-------
fs/gfs2/rgrp.c | 2 +-
fs/jbd2/journal.c | 7 ++-----
fs/jfs/ioctl.c | 2 +-
fs/jfs/super.c | 8 ++------
fs/nilfs2/ioctl.c | 2 +-
fs/ntfs3/file.c | 2 +-
fs/ntfs3/super.c | 2 +-
fs/ocfs2/ioctl.c | 2 +-
fs/xfs/xfs_discard.c | 2 +-
fs/xfs/xfs_super.c | 12 ++++--------
include/linux/blkdev.h | 5 +++++
mm/swapfile.c | 17 ++---------------
48 files changed, 87 insertions(+), 163 deletions(-)
[snipped]
diff --git a/drivers/md/bcache/request.c b/drivers/md/bcache/request.c
index fdd0194f84dd0..e27f67f06a428 100644
--- a/drivers/md/bcache/request.c
+++ b/drivers/md/bcache/request.c
@@ -1005,7 +1005,7 @@ static void cached_dev_write(struct cached_dev *dc, struct search *s)
bio_get(s->iop.bio);
if (bio_op(bio) == REQ_OP_DISCARD &&
- !blk_queue_discard(bdev_get_queue(dc->bdev)))
+ !bdev_max_discard_sectors(dc->bdev))
goto insert_data;
/* I/O request sent to backing device */
@@ -1115,7 +1115,7 @@ static void detached_dev_do_request(struct bcache_device *d, struct bio *bio,
bio->bi_private = ddip;
if ((bio_op(bio) == REQ_OP_DISCARD) &&
- !blk_queue_discard(bdev_get_queue(dc->bdev)))
+ !bdev_max_discard_sectors(dc->bdev))
bio->bi_end_io(bio);
else
submit_bio_noacct(bio);
diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c
index bf3de149d3c9f..296f200b2e208 100644
--- a/drivers/md/bcache/super.c
+++ b/drivers/md/bcache/super.c
@@ -2350,7 +2350,7 @@ static int register_cache(struct cache_sb *sb, struct cache_sb_disk *sb_disk,
ca->bdev->bd_holder = ca;
ca->sb_disk = sb_disk;
- if (blk_queue_discard(bdev_get_queue(bdev)))
+ if (bdev_max_discard_sectors((bdev)))
ca->discard = CACHE_DISCARD(&ca->sb);
ret = cache_alloc(ca);
diff --git a/drivers/md/bcache/sysfs.c b/drivers/md/bcache/sysfs.c
index d1029d71ff3bc..c6f677059214d 100644
--- a/drivers/md/bcache/sysfs.c
+++ b/drivers/md/bcache/sysfs.c
@@ -1151,7 +1151,7 @@ STORE(__bch_cache)
if (attr == &sysfs_discard) {
bool v = strtoul_or_return(buf);
- if (blk_queue_discard(bdev_get_queue(ca->bdev)))
+ if (bdev_max_discard_sectors(ca->bdev))
ca->discard = v;
if (v != CACHE_DISCARD(&ca->sb)) {
[snipped]