Re: [Cluster-devel] [PATCH 24/27] block: add a bdev_discard_granularity helper

2022-04-08 Thread Ryusuke Konishi
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) 

Re: [Cluster-devel] [PATCH 24/27] block: add a bdev_discard_granularity helper

2022-04-07 Thread David Sterba
On Wed, Apr 06, 2022 at 08:05:13AM +0200, 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 +--

For

>  fs/btrfs/ioctl.c| 12 

Acked-by: David Sterba