public inbox for linux-block@vger.kernel.org
 help / color / mirror / Atom feed
From: Ming Lei <ming.lei@redhat.com>
To: Christoph Hellwig <hch@lst.de>
Cc: Jens Axboe <axboe@kernel.dk>,
	Ulf Hansson <ulf.hansson@linaro.org>,
	linux-block@vger.kernel.org, linux-mmc@vger.kernel.org,
	linux-scsi@vger.kernel.org
Subject: Re: [PATCH 11/14] block: remove GENHD_FL_EXT_DEVT
Date: Thu, 26 May 2022 11:06:47 +0800	[thread overview]
Message-ID: <Yo7uxyrD2BywxEHt@T590> (raw)
In-Reply-To: <20220525165114.GA2750@lst.de>

On Wed, May 25, 2022 at 06:51:14PM +0200, Christoph Hellwig wrote:
> On Wed, May 25, 2022 at 10:35:56PM +0800, Ming Lei wrote:
> > > @@ -872,7 +871,8 @@ static ssize_t disk_ext_range_show(struct device *dev,
> > >  {
> > >  	struct gendisk *disk = dev_to_disk(dev);
> > >  
> > > -	return sprintf(buf, "%d\n", disk_max_parts(disk));
> > > +	return sprintf(buf, "%d\n",
> >
> >
> > The above change breaks parted on loop, which reads 'ext_range' to add
> > partitions.
> 
> That change alone is not the one breaking it alone, as even if the
> file reported something else you still could not create new partitions.
> 
> Something like the test below should fix it, but I'll need some more
> time to actually test it:
> 
> diff --git a/block/genhd.c b/block/genhd.c
> index 36532b9318419..27205ae47d593 100644
> --- a/block/genhd.c
> +++ b/block/genhd.c
> @@ -385,6 +385,8 @@ int disk_scan_partitions(struct gendisk *disk, fmode_t mode)
>  
>  	if (disk->flags & (GENHD_FL_NO_PART | GENHD_FL_HIDDEN))
>  		return -EINVAL;
> +	if (test_bit(GD_SUPPRESS_PART_SCAN, &disk->state))
> +		return -EINVAL;
>  	if (disk->open_partitions)
>  		return -EBUSY;
>  
> diff --git a/drivers/block/loop.c b/drivers/block/loop.c
> index e2cb51810e89a..5bef97ffbe21e 100644
> --- a/drivers/block/loop.c
> +++ b/drivers/block/loop.c
> @@ -1102,7 +1102,7 @@ static int loop_configure(struct loop_device *lo, fmode_t mode,
>  		lo->lo_flags |= LO_FLAGS_PARTSCAN;
>  	partscan = lo->lo_flags & LO_FLAGS_PARTSCAN;
>  	if (partscan)
> -		lo->lo_disk->flags &= ~GENHD_FL_NO_PART;
> +		clear_bit(GD_SUPPRESS_PART_SCAN, &lo->lo_disk->state);
>  
>  	loop_global_unlock(lo, is_loop);
>  	if (partscan)
> @@ -1198,7 +1198,7 @@ static void __loop_clr_fd(struct loop_device *lo, bool release)
>  	 */
>  	lo->lo_flags = 0;
>  	if (!part_shift)
> -		lo->lo_disk->flags |= GENHD_FL_NO_PART;
> +		set_bit(GD_SUPPRESS_PART_SCAN, &lo->lo_disk->state);
>  	mutex_lock(&lo->lo_mutex);
>  	lo->lo_state = Lo_unbound;
>  	mutex_unlock(&lo->lo_mutex);
> @@ -1308,7 +1308,7 @@ loop_set_status(struct loop_device *lo, const struct loop_info64 *info)
>  
>  	if (!err && (lo->lo_flags & LO_FLAGS_PARTSCAN) &&
>  	     !(prev_lo_flags & LO_FLAGS_PARTSCAN)) {
> -		lo->lo_disk->flags &= ~GENHD_FL_NO_PART;
> +		clear_bit(GD_SUPPRESS_PART_SCAN, &lo->lo_disk->state);
>  		partscan = true;
>  	}
>  out_unlock:
> @@ -2011,7 +2011,7 @@ static int loop_add(int i)
>  	 * userspace tools. Parameters like this in general should be avoided.
>  	 */
>  	if (!part_shift)
> -		disk->flags |= GENHD_FL_NO_PART;
> +		set_bit(GD_SUPPRESS_PART_SCAN, &disk->state);
>  	mutex_init(&lo->lo_mutex);
>  	lo->lo_number		= i;
>  	spin_lock_init(&lo->lo_lock);
> diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
> index 1b24c1fb3bb1e..bf0c85cfdd8bf 100644
> --- a/include/linux/blkdev.h
> +++ b/include/linux/blkdev.h
> @@ -147,6 +147,7 @@ struct gendisk {
>  #define GD_DEAD				2
>  #define GD_NATIVE_CAPACITY		3
>  #define GD_ADDED			4
> +#define GD_SUPPRESS_PART_SCAN		4
>  
>  	struct mutex open_mutex;	/* open/close mutex */
>  	unsigned open_partitions;	/* number of open partitions */

The patch itself can fix the issue in this test case, since ext_range
recovers to 256.

BTW, SUPPRESS_PART_SCAN looks more like one flag, instead of 'state'.



Thanks,
Ming


  parent reply	other threads:[~2022-05-26  3:07 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-22 13:06 cleanup and simplify the gendisk flags Christoph Hellwig
2021-11-22 13:06 ` [PATCH 01/14] block: move GENHD_FL_NATIVE_CAPACITY to disk->state Christoph Hellwig
2021-11-22 13:06 ` [PATCH 02/14] block: move GENHD_FL_BLOCK_EVENTS_ON_EXCL_WRITE to disk->event_flags Christoph Hellwig
2021-11-22 13:06 ` [PATCH 03/14] block: remove GENHD_FL_CD Christoph Hellwig
2021-11-22 13:06 ` [PATCH 04/14] block: remove a dead check in show_partition Christoph Hellwig
2021-11-22 13:06 ` [PATCH 05/14] block: merge disk_scan_partitions and blkdev_reread_part Christoph Hellwig
2021-11-22 13:06 ` [PATCH 06/14] block: rename GENHD_FL_NO_PART_SCAN to GENHD_FL_NO_PART Christoph Hellwig
2021-11-22 14:02   ` Ulf Hansson
2021-11-22 13:06 ` [PATCH 07/14] block: remove the GENHD_FL_HIDDEN check in blkdev_get_no_open Christoph Hellwig
2021-11-22 13:06 ` [PATCH 08/14] null_blk: don't suppress partitioning information Christoph Hellwig
2021-11-22 13:06 ` [PATCH 09/14] mmc: don't set GENHD_FL_SUPPRESS_PARTITION_INFO Christoph Hellwig
2021-11-22 14:02   ` Ulf Hansson
2021-11-22 13:06 ` [PATCH 10/14] block: remove GENHD_FL_SUPPRESS_PARTITION_INFO Christoph Hellwig
2021-11-22 13:06 ` [PATCH 11/14] block: remove GENHD_FL_EXT_DEVT Christoph Hellwig
2022-05-25 14:35   ` Ming Lei
2022-05-25 16:51     ` Christoph Hellwig
2022-05-25 16:51       ` Christoph Hellwig
2022-05-26  3:06       ` Ming Lei [this message]
2022-05-26  9:08         ` Christoph Hellwig
2021-11-22 13:06 ` [PATCH 12/14] block: don't set GENHD_FL_NO_PART for hidden gendisks Christoph Hellwig
2021-11-22 13:06 ` [PATCH 13/14] block: cleanup the GENHD_FL_* definitions Christoph Hellwig
2021-11-22 13:06 ` [PATCH 14/14] sr: set GENHD_FL_REMOVABLE earlier Christoph Hellwig
2021-11-23 16:10 ` cleanup and simplify the gendisk flags Jens Axboe

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Yo7uxyrD2BywxEHt@T590 \
    --to=ming.lei@redhat.com \
    --cc=axboe@kernel.dk \
    --cc=hch@lst.de \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-mmc@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=ulf.hansson@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox