* [PATCH] block, loop: support partitions without scanning
@ 2022-05-27 5:58 Christoph Hellwig
2022-05-27 12:15 ` Ming Lei
2022-05-27 12:39 ` Jens Axboe
0 siblings, 2 replies; 3+ messages in thread
From: Christoph Hellwig @ 2022-05-27 5:58 UTC (permalink / raw)
To: axboe; +Cc: linux-block, Ming Lei
Historically we did distinguish between a flag that surpressed partition
scanning, and a combinations of the minors variable and another flag if
any partitions were supported. This was generally confusing and doesn't
make much sense, but some corner case uses of the loop driver actually
do want to support manually added partitions on a device that does not
actively scan for partitions. To make things worsee the loop driver
also wants to dynamically toggle the scanning for partitions on a live
gendisk, which makes the disk->flags updates non-atomic.
Introduce a new GD_SUPPRESS_PART_SCAN bit in disk->state that disables
just scanning for partitions, and toggle that instead of GENHD_FL_NO_PART
in the loop driver.
Fixes: 1ebe2e5f9d68 ("block: remove GENHD_FL_EXT_DEVT")
Reported-by: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
block/genhd.c | 2 ++
drivers/block/loop.c | 8 ++++----
include/linux/blkdev.h | 1 +
3 files changed, 7 insertions(+), 4 deletions(-)
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..608d577734c29 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 5
struct mutex open_mutex; /* open/close mutex */
unsigned open_partitions; /* number of open partitions */
--
2.30.2
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [PATCH] block, loop: support partitions without scanning
2022-05-27 5:58 [PATCH] block, loop: support partitions without scanning Christoph Hellwig
@ 2022-05-27 12:15 ` Ming Lei
2022-05-27 12:39 ` Jens Axboe
1 sibling, 0 replies; 3+ messages in thread
From: Ming Lei @ 2022-05-27 12:15 UTC (permalink / raw)
To: Christoph Hellwig; +Cc: axboe, linux-block
On Fri, May 27, 2022 at 07:58:06AM +0200, Christoph Hellwig wrote:
> Historically we did distinguish between a flag that surpressed partition
> scanning, and a combinations of the minors variable and another flag if
> any partitions were supported. This was generally confusing and doesn't
> make much sense, but some corner case uses of the loop driver actually
> do want to support manually added partitions on a device that does not
> actively scan for partitions. To make things worsee the loop driver
> also wants to dynamically toggle the scanning for partitions on a live
> gendisk, which makes the disk->flags updates non-atomic.
>
> Introduce a new GD_SUPPRESS_PART_SCAN bit in disk->state that disables
> just scanning for partitions, and toggle that instead of GENHD_FL_NO_PART
> in the loop driver.
>
> Fixes: 1ebe2e5f9d68 ("block: remove GENHD_FL_EXT_DEVT")
> Reported-by: Ming Lei <ming.lei@redhat.com>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Ming Lei <ming.lei@redhat.com>
Thanks,
Ming
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH] block, loop: support partitions without scanning
2022-05-27 5:58 [PATCH] block, loop: support partitions without scanning Christoph Hellwig
2022-05-27 12:15 ` Ming Lei
@ 2022-05-27 12:39 ` Jens Axboe
1 sibling, 0 replies; 3+ messages in thread
From: Jens Axboe @ 2022-05-27 12:39 UTC (permalink / raw)
To: Christoph Hellwig; +Cc: linux-block, ming.lei
On Fri, 27 May 2022 07:58:06 +0200, Christoph Hellwig wrote:
> Historically we did distinguish between a flag that surpressed partition
> scanning, and a combinations of the minors variable and another flag if
> any partitions were supported. This was generally confusing and doesn't
> make much sense, but some corner case uses of the loop driver actually
> do want to support manually added partitions on a device that does not
> actively scan for partitions. To make things worsee the loop driver
> also wants to dynamically toggle the scanning for partitions on a live
> gendisk, which makes the disk->flags updates non-atomic.
>
> [...]
Applied, thanks!
[1/1] block, loop: support partitions without scanning
commit: b9684a71fca793213378dd410cd11675d973eaa1
Best regards,
--
Jens Axboe
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2022-05-27 12:43 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-05-27 5:58 [PATCH] block, loop: support partitions without scanning Christoph Hellwig
2022-05-27 12:15 ` Ming Lei
2022-05-27 12:39 ` Jens Axboe
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox