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
next prev 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