Re: [PATCH v9 06/41] btrfs: introduce max_zone_append_size

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Oct 30, 2020 at 10:51:13PM +0900, Naohiro Aota wrote:
> --- a/fs/btrfs/ctree.h
> +++ b/fs/btrfs/ctree.h
> @@ -953,6 +953,8 @@ struct btrfs_fs_info {
>  		u64 zone_size;
>  		u64 zoned;
>  	};
> +	/* max size to emit ZONE_APPEND write command */

	/* Max size ... */

> +	u64 max_zone_append_size;
>  
>  #ifdef CONFIG_BTRFS_FS_REF_VERIFY
>  	spinlock_t ref_verify_lock;
> diff --git a/fs/btrfs/zoned.c b/fs/btrfs/zoned.c
> index e1cdff5af3a3..1b42e13b8227 100644
> --- a/fs/btrfs/zoned.c
> +++ b/fs/btrfs/zoned.c
> @@ -47,6 +47,7 @@ int btrfs_get_dev_zone_info(struct btrfs_device *device)
>  {
>  	struct btrfs_zoned_device_info *zone_info = NULL;
>  	struct block_device *bdev = device->bdev;
> +	struct request_queue *q = bdev_get_queue(bdev);

No single letter variables (exception is 'i' for indexing)

>  	sector_t nr_sectors = bdev->bd_part->nr_sects;
>  	sector_t sector = 0;
>  	struct blk_zone *zones = NULL;
> @@ -70,6 +71,8 @@ int btrfs_get_dev_zone_info(struct btrfs_device *device)
>  	ASSERT(is_power_of_2(zone_sectors));
>  	zone_info->zone_size = (u64)zone_sectors << SECTOR_SHIFT;
>  	zone_info->zone_size_shift = ilog2(zone_info->zone_size);
> +	zone_info->max_zone_append_size =
> +		(u64)queue_max_zone_append_sectors(q) << SECTOR_SHIFT;
>  	zone_info->nr_zones = nr_sectors >> ilog2(bdev_zone_sectors(bdev));
>  	if (!IS_ALIGNED(nr_sectors, zone_sectors))
>  		zone_info->nr_zones++;
> @@ -182,7 +185,8 @@ int btrfs_check_zoned_mode(struct btrfs_fs_info *fs_info)
>  	u64 hmzoned_devices = 0;
>  	u64 nr_devices = 0;
>  	u64 zone_size = 0;
> -	int incompat_zoned = btrfs_is_zoned(fs_info);
> +	u64 max_zone_append_size = 0;
> +	bool incompat_zoned = btrfs_is_zoned(fs_info);

	const bool

>  	int ret = 0;
>  
>  	/* Count zoned devices */
> @@ -195,15 +199,23 @@ int btrfs_check_zoned_mode(struct btrfs_fs_info *fs_info)
>  		model = bdev_zoned_model(device->bdev);
>  		if (model == BLK_ZONED_HM ||
>  		    (model == BLK_ZONED_HA && incompat_zoned)) {
> +			struct btrfs_zoned_device_info *zone_info =
> +				device->zone_info;
> +
>  			hmzoned_devices++;

I must have missed in some previous patch, 'hmzoned' should be zoned?

>  			if (!zone_size) {
> -				zone_size = device->zone_info->zone_size;
> -			} else if (device->zone_info->zone_size != zone_size) {
> +				zone_size = zone_info->zone_size;
> +			} else if (zone_info->zone_size != zone_size) {
>  				btrfs_err(fs_info,
>  					  "Zoned block devices must have equal zone sizes");

				"zoned: devices must have equal zone sizes, have %u found %u"

>  				ret = -EINVAL;
>  				goto out;
>  			}
> +			if (!max_zone_append_size ||
> +			    (zone_info->max_zone_append_size &&
> +			     zone_info->max_zone_append_size < max_zone_append_size))
> +				max_zone_append_size =
> +					zone_info->max_zone_append_size;
>  		}
>  		nr_devices++;
>  	}



[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]

  Powered by Linux