[PATCH 29/44] block: remove the nr_sects field in struct hd_struct

Jan Kara jack at suse.cz
Thu Nov 26 11:50:36 EST 2020


On Thu 26-11-20 14:04:07, Christoph Hellwig wrote:
> Now that the hd_struct always has a block device attached to it, there is
> no need for having two size field that just get out of sync.
> 
> Additional the field in hd_struct did not use proper serializiation,
   ^^ Additionaly					^^^ serialization

> possibly allowing for torn writes.  By only using the block_device field
> this problem also gets fixed.
> 
> Signed-off-by: Christoph Hellwig <hch at lst.de>
> Reviewed-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
> Acked-by: Coly Li <colyli at suse.de>			[bcache]
> Acked-by: Chao Yu <yuchao0 at huawei.com>			[f2fs]

Nice, just two nits below.

> @@ -47,18 +57,22 @@ static void disk_release_events(struct gendisk *disk);
>  bool set_capacity_and_notify(struct gendisk *disk, sector_t size)
>  {
>  	sector_t capacity = get_capacity(disk);
> +	char *envp[] = { "RESIZE=1", NULL };
>  
>  	set_capacity(disk, size);
> -	revalidate_disk_size(disk, true);
> -
> -	if (capacity != size && capacity != 0 && size != 0) {
> -		char *envp[] = { "RESIZE=1", NULL };
> -
> -		kobject_uevent_env(&disk_to_dev(disk)->kobj, KOBJ_CHANGE, envp);
> -		return true;
> -	}
>  
> -	return false;
> +	/*
> +	 * Only print a message and send a uevent if the gendisk is user visible
> +	 * and alive.  This avoids spamming the log and udev when setting the
> +	 * initial capacity during probing.
> +	 */
> +	if (size == capacity ||
> +	    (disk->flags & (GENHD_FL_UP | GENHD_FL_HIDDEN)) != GENHD_FL_UP)
> +		return false;
> +	pr_info("%s: detected capacity change from %lld to %lld\n",
> +		disk->disk_name, size, capacity);
> +	kobject_uevent_env(&disk_to_dev(disk)->kobj, KOBJ_CHANGE, envp);

I think we don't want to generate resize event for changes from / to 0...
Also the return value of this function is now different.

> diff --git a/drivers/target/target_core_pscsi.c b/drivers/target/target_core_pscsi.c
> index 4e37fa9b409d52..a70c33c49f0960 100644
> --- a/drivers/target/target_core_pscsi.c
> +++ b/drivers/target/target_core_pscsi.c
> @@ -1027,12 +1027,7 @@ static u32 pscsi_get_device_type(struct se_device *dev)
>  
>  static sector_t pscsi_get_blocks(struct se_device *dev)
>  {
> -	struct pscsi_dev_virt *pdv = PSCSI_DEV(dev);
> -
> -	if (pdv->pdv_bd && pdv->pdv_bd->bd_part)
> -		return pdv->pdv_bd->bd_part->nr_sects;
> -
> -	return 0;
> +	return bdev_nr_sectors(PSCSI_DEV(dev)->pdv_bd);

I pdv_bd guaranteed to be non-NULL in pscsi_dev_virt?

								Honza
-- 
Jan Kara <jack at suse.com>
SUSE Labs, CR



More information about the linux-mtd mailing list