On Wed, Apr 6, 2022 at 11:06 PM Christoph Hellwig wrote:
>
> Abstract away implementation details from file systems by providing a
> block_device based helper to retreive the discard granularity.
>
> Signed-off-by: Christoph Hellwig
> ---
> block/blk-lib.c | 5 ++---
> drivers/block/drbd/drbd_nl.c| 9 +
> drivers/block/drbd/drbd_receiver.c | 3 +--
> drivers/block/loop.c| 2 +-
> drivers/target/target_core_device.c | 3 +--
> fs/btrfs/ioctl.c| 12
> fs/exfat/file.c | 3 +--
> fs/ext4/mballoc.c | 6 +++---
> fs/f2fs/file.c | 3 +--
> fs/fat/file.c | 3 +--
> fs/gfs2/rgrp.c | 7 +++
> fs/jfs/ioctl.c | 3 +--
> fs/nilfs2/ioctl.c | 4 ++--
> fs/ntfs3/file.c | 4 ++--
> fs/ntfs3/super.c| 6 ++
> fs/ocfs2/ioctl.c| 3 +--
> fs/xfs/xfs_discard.c| 4 ++--
> include/linux/blkdev.h | 5 +
> 18 files changed, 38 insertions(+), 47 deletions(-)
>
> diff --git a/block/blk-lib.c b/block/blk-lib.c
> index 8b4b66d3a9bfc..43aa4d7fe859f 100644
> --- a/block/blk-lib.c
> +++ b/block/blk-lib.c
> @@ -12,8 +12,7 @@
>
> static sector_t bio_discard_limit(struct block_device *bdev, sector_t sector)
> {
> - unsigned int discard_granularity =
> - bdev_get_queue(bdev)->limits.discard_granularity;
> + unsigned int discard_granularity = bdev_discard_granularity(bdev);
> sector_t granularity_aligned_sector;
>
> if (bdev_is_partition(bdev))
> @@ -59,7 +58,7 @@ int __blkdev_issue_discard(struct block_device *bdev,
> sector_t sector,
> }
>
> /* In case the discard granularity isn't set by buggy device driver */
> - if (WARN_ON_ONCE(!q->limits.discard_granularity)) {
> + if (WARN_ON_ONCE(!bdev_discard_granularity(bdev))) {
> char dev_name[BDEVNAME_SIZE];
>
> bdevname(bdev, dev_name);
> diff --git a/drivers/block/drbd/drbd_nl.c b/drivers/block/drbd/drbd_nl.c
> index 8e28e0a8e5e41..94ac3737723a8 100644
> --- a/drivers/block/drbd/drbd_nl.c
> +++ b/drivers/block/drbd/drbd_nl.c
> @@ -1440,7 +1440,6 @@ static void sanitize_disk_conf(struct drbd_device
> *device, struct disk_conf *dis
>struct drbd_backing_dev *nbc)
> {
> struct block_device *bdev = nbc->backing_bdev;
> - struct request_queue *q = bdev->bd_disk->queue;
>
> if (disk_conf->al_extents < DRBD_AL_EXTENTS_MIN)
> disk_conf->al_extents = DRBD_AL_EXTENTS_MIN;
> @@ -1457,12 +1456,14 @@ static void sanitize_disk_conf(struct drbd_device
> *device, struct disk_conf *dis
> if (disk_conf->rs_discard_granularity) {
> int orig_value = disk_conf->rs_discard_granularity;
> sector_t discard_size = bdev_max_discard_sectors(bdev) << 9;
> + unsigned int discard_granularity =
> bdev_discard_granularity(bdev);
> int remainder;
>
> - if (q->limits.discard_granularity >
> disk_conf->rs_discard_granularity)
> - disk_conf->rs_discard_granularity =
> q->limits.discard_granularity;
> + if (discard_granularity > disk_conf->rs_discard_granularity)
> + disk_conf->rs_discard_granularity =
> discard_granularity;
>
> - remainder = disk_conf->rs_discard_granularity %
> q->limits.discard_granularity;
> + remainder = disk_conf->rs_discard_granularity %
> + discard_granularity;
> disk_conf->rs_discard_granularity += remainder;
>
> if (disk_conf->rs_discard_granularity > discard_size)
> diff --git a/drivers/block/drbd/drbd_receiver.c
> b/drivers/block/drbd/drbd_receiver.c
> index 8a4a47da56fe9..275c53c7b629e 100644
> --- a/drivers/block/drbd/drbd_receiver.c
> +++ b/drivers/block/drbd/drbd_receiver.c
> @@ -1511,7 +1511,6 @@ void drbd_bump_write_ordering(struct drbd_resource
> *resource, struct drbd_backin
> int drbd_issue_discard_or_zero_out(struct drbd_device *device, sector_t
> start, unsigned int nr_sectors, int flags)
> {
> struct block_device *bdev = device->ldev->backing_bdev;
> - struct request_queue *q = bdev_get_queue(bdev);
> sector_t tmp, nr;
> unsigned int max_discard_sectors, granularity;
> int alignment;
> @@ -1521,7 +1520,7 @@ int drbd_issue_discard_or_zero_out(struct drbd_device
> *device, sector_t start, u
> goto zero_out;
>
> /* Zero-sector (unknown) and one-sector granularities are the same.
> */
> - granularity = max(q->limits.discard_granularity >> 9, 1U);
> + granularity = max(bdev_discard_granularity(bdev) >> 9, 1U);
> alignment = (bdev_discard_alignment(bdev) >> 9)