linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: New partition on loop device doesn't appear in /dev anymore with kernel 5.17.0 and newer (repro script included)
       [not found] <CALt099+y4-kJ0OqVeKaAjAbs4inOkR-WE0FmyiJRDc1-Ev9UKw@mail.gmail.com>
@ 2022-06-03 12:49 ` Christoph Hellwig
  2022-06-03 13:21   ` Michael Schaller
  0 siblings, 1 reply; 9+ messages in thread
From: Christoph Hellwig @ 2022-06-03 12:49 UTC (permalink / raw)
  To: Michael Schaller; +Cc: axboe, linux-block, hch, Linux Kernel Mailing List

You probably want this attached fix:

---
From b9684a71fca793213378dd410cd11675d973eaa1 Mon Sep 17 00:00:00 2001
From: Christoph Hellwig <hch@lst.de>
Date: Fri, 27 May 2022 07:58:06 +0200
Subject: block, loop: support partitions without scanning

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>
Link: https://lore.kernel.org/r/20220527055806.1972352-1-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
---
 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 01b4e257016a1..121f96dfc23eb 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:
@@ -2009,7 +2009,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 afad3d1d0dac0..691b4c15b8ce1 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] 9+ messages in thread

* Re: New partition on loop device doesn't appear in /dev anymore with kernel 5.17.0 and newer (repro script included)
  2022-06-03 12:49 ` New partition on loop device doesn't appear in /dev anymore with kernel 5.17.0 and newer (repro script included) Christoph Hellwig
@ 2022-06-03 13:21   ` Michael Schaller
  2022-06-03 13:23     ` Christoph Hellwig
  2022-06-09  4:27     ` Christoph Hellwig
  0 siblings, 2 replies; 9+ messages in thread
From: Michael Schaller @ 2022-06-03 13:21 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: axboe, linux-block, Linux Kernel Mailing List

Thank you, Christoph! <3

Patch https://lore.kernel.org/all/20220527055806.1972352-1-hch@lst.de/
does indeed fix the issue.

Could this patch also be backported to 5.17 and 5.18?

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: New partition on loop device doesn't appear in /dev anymore with kernel 5.17.0 and newer (repro script included)
  2022-06-03 13:21   ` Michael Schaller
@ 2022-06-03 13:23     ` Christoph Hellwig
  2022-06-05 10:00       ` Salvatore Bonaccorso
  2022-06-09  4:27     ` Christoph Hellwig
  1 sibling, 1 reply; 9+ messages in thread
From: Christoph Hellwig @ 2022-06-03 13:23 UTC (permalink / raw)
  To: Michael Schaller
  Cc: Christoph Hellwig, axboe, linux-block, Linux Kernel Mailing List

On Fri, Jun 03, 2022 at 03:21:28PM +0200, Michael Schaller wrote:
> Thank you, Christoph! <3
> 
> Patch https://lore.kernel.org/all/20220527055806.1972352-1-hch@lst.de/
> does indeed fix the issue.
> 
> Could this patch also be backported to 5.17 and 5.18?

It should get picked up automatically based on the fixes tag as soon
as it hits mainline.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: New partition on loop device doesn't appear in /dev anymore with kernel 5.17.0 and newer (repro script included)
  2022-06-03 13:23     ` Christoph Hellwig
@ 2022-06-05 10:00       ` Salvatore Bonaccorso
  2022-06-06  7:49         ` Christoph Hellwig
  0 siblings, 1 reply; 9+ messages in thread
From: Salvatore Bonaccorso @ 2022-06-05 10:00 UTC (permalink / raw)
  To: Christoph Hellwig
  Cc: Michael Schaller, axboe, linux-block, Linux Kernel Mailing List

Hi,

On Fri, Jun 03, 2022 at 03:23:13PM +0200, Christoph Hellwig wrote:
> On Fri, Jun 03, 2022 at 03:21:28PM +0200, Michael Schaller wrote:
> > Thank you, Christoph! <3
> > 
> > Patch https://lore.kernel.org/all/20220527055806.1972352-1-hch@lst.de/
> > does indeed fix the issue.
> > 
> > Could this patch also be backported to 5.17 and 5.18?
> 
> It should get picked up automatically based on the fixes tag as soon
> as it hits mainline.

As it does not apply cleanly to older versions, this probably will
need a sperate turnaround, but AFAICS it's just because of
a0e286b6a5b6 ("loop: remove lo_refcount and avoid lo_mutex in ->open /
->release") changing context of the fourth hunk in
drivers/block/loop.c .

Regards,
Salvatore

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: New partition on loop device doesn't appear in /dev anymore with kernel 5.17.0 and newer (repro script included)
  2022-06-05 10:00       ` Salvatore Bonaccorso
@ 2022-06-06  7:49         ` Christoph Hellwig
  0 siblings, 0 replies; 9+ messages in thread
From: Christoph Hellwig @ 2022-06-06  7:49 UTC (permalink / raw)
  To: Salvatore Bonaccorso
  Cc: Christoph Hellwig, Michael Schaller, axboe, linux-block,
	Linux Kernel Mailing List

On Sun, Jun 05, 2022 at 12:00:10PM +0200, Salvatore Bonaccorso wrote:
> Hi,
> 
> On Fri, Jun 03, 2022 at 03:23:13PM +0200, Christoph Hellwig wrote:
> > On Fri, Jun 03, 2022 at 03:21:28PM +0200, Michael Schaller wrote:
> > > Thank you, Christoph! <3
> > > 
> > > Patch https://lore.kernel.org/all/20220527055806.1972352-1-hch@lst.de/
> > > does indeed fix the issue.
> > > 
> > > Could this patch also be backported to 5.17 and 5.18?
> > 
> > It should get picked up automatically based on the fixes tag as soon
> > as it hits mainline.
> 
> As it does not apply cleanly to older versions, this probably will
> need a sperate turnaround, but AFAICS it's just because of
> a0e286b6a5b6 ("loop: remove lo_refcount and avoid lo_mutex in ->open /
> ->release") changing context of the fourth hunk in
> drivers/block/loop.c .

Normally the stable process takes care of such trivial changes.  I'll
wait for the next batch and if not take care of it manually.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: New partition on loop device doesn't appear in /dev anymore with kernel 5.17.0 and newer (repro script included)
  2022-06-03 13:21   ` Michael Schaller
  2022-06-03 13:23     ` Christoph Hellwig
@ 2022-06-09  4:27     ` Christoph Hellwig
  2022-06-09  7:10       ` Michael Schaller
  1 sibling, 1 reply; 9+ messages in thread
From: Christoph Hellwig @ 2022-06-09  4:27 UTC (permalink / raw)
  To: Michael Schaller
  Cc: Christoph Hellwig, axboe, linux-block, Linux Kernel Mailing List

On Fri, Jun 03, 2022 at 03:21:28PM +0200, Michael Schaller wrote:
> Could this patch also be backported to 5.17 and 5.18?

I've sent the backports now.  Any chance I could trick you into submitting
your reproducer to blktests:

   https://github.com/osandov/blktests

?

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: New partition on loop device doesn't appear in /dev anymore with kernel 5.17.0 and newer (repro script included)
  2022-06-09  4:27     ` Christoph Hellwig
@ 2022-06-09  7:10       ` Michael Schaller
  2022-06-21  7:55         ` Michael Schaller
  0 siblings, 1 reply; 9+ messages in thread
From: Michael Schaller @ 2022-06-09  7:10 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: axboe, linux-block, Linux Kernel Mailing List

On Thu, Jun 9, 2022 at 6:27 AM Christoph Hellwig <hch@lst.de> wrote:
> Any chance I could trick you into submitting your reproducer to blktests:
>
>    https://github.com/osandov/blktests
>
> ?

No need to trick me. ;-)
https://github.com/osandov/blktests/pull/93


Michael Schaller
Site Reliability Engineer - Software Engineer
misch@google.com

Google Germany GmbH
Erika-Mann-Straße 33
80636 München

Geschäftsführer: Paul Manicle, Liana Sebastian
Registergericht und -nummer: Hamburg, HRB 86891
Sitz der Gesellschaft: Hamburg

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: New partition on loop device doesn't appear in /dev anymore with kernel 5.17.0 and newer (repro script included)
  2022-06-09  7:10       ` Michael Schaller
@ 2022-06-21  7:55         ` Michael Schaller
  0 siblings, 0 replies; 9+ messages in thread
From: Michael Schaller @ 2022-06-21  7:55 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: axboe, linux-block, Linux Kernel Mailing List

Done: https://github.com/osandov/blktests/commit/e067296aa2c5ba89d8140113af1e8e50241275b3

On Thu, Jun 9, 2022 at 9:10 AM Michael Schaller <misch@google.com> wrote:
>
> On Thu, Jun 9, 2022 at 6:27 AM Christoph Hellwig <hch@lst.de> wrote:
> > Any chance I could trick you into submitting your reproducer to blktests:
> >
> >    https://github.com/osandov/blktests
> >
> > ?
>
> No need to trick me. ;-)
> https://github.com/osandov/blktests/pull/93
>
>
> Michael Schaller
> Site Reliability Engineer - Software Engineer
> misch@google.com
>
> Google Germany GmbH
> Erika-Mann-Straße 33
> 80636 München
>
> Geschäftsführer: Paul Manicle, Liana Sebastian
> Registergericht und -nummer: Hamburg, HRB 86891
> Sitz der Gesellschaft: Hamburg

^ permalink raw reply	[flat|nested] 9+ messages in thread

* New partition on loop device doesn't appear in /dev anymore with kernel 5.17.0 and newer (repro script included)
@ 2022-06-03 12:46 Michael Schaller
  0 siblings, 0 replies; 9+ messages in thread
From: Michael Schaller @ 2022-06-03 12:46 UTC (permalink / raw)
  To: axboe; +Cc: hch, linux-block, Linux Kernel Mailing List

[-- Attachment #1: Type: text/plain, Size: 1651 bytes --]

Dear maintainer,

Since kernel 5.17.0 it appears that creating a partition on a loop
device doesn't automatically create the corresponding /dev/loop#p#
entry anymore. We rolled back to kernel 5.16.18, which doesn't have
this issue. I also tested kernel 5.18.1 and it is affected as well.

I've attached repro.sh, which is a Bash script that reproduces the
issue (tested on Debian testing). The script only requires standard
Linux tools (including GNU Parted). The script creates a raw disk
image file (sparse), associates the file with a loop device and
partitions the loop device so that it only contains an ESP. At this
point there should be a /dev/loop#p1 entry so that the following
mkfs.vfat can create the filesystem for the ESP. However on kernel
5.17.0 and newer /dev/loop#p1 isn't created and mkfs.vfat fails with
"No such file or directory". Furthermore on kernel 5.17.0 and newer we
see the following error in the kernel log: "I/O error, dev loop#,
sector 32640 op 0x0:(READ) flags 0x80700 phys_seg 1 prio class 0"

I also did a kernel bisect against the vanilla stable kernels and that
revealed commit 1ebe2e5f9d68e94c524aba876f27b945669a7879 as the first
problematic commit. I've cc'ed the commit author as well.

This issue is also tracked on the Debian side with
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1012298.

Best,

Michael Schaller
Site Reliability Engineer - Software Engineer
misch@google.com

Google Germany GmbH
Erika-Mann-Straße 33
80636 München

Geschäftsführer: Paul Manicle, Liana Sebastian
Registergericht und -nummer: Hamburg, HRB 86891
Sitz der Gesellschaft: Hamburg

[-- Attachment #2: repro.sh --]
[-- Type: application/x-shellscript, Size: 1043 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2022-06-21  7:55 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <CALt099+y4-kJ0OqVeKaAjAbs4inOkR-WE0FmyiJRDc1-Ev9UKw@mail.gmail.com>
2022-06-03 12:49 ` New partition on loop device doesn't appear in /dev anymore with kernel 5.17.0 and newer (repro script included) Christoph Hellwig
2022-06-03 13:21   ` Michael Schaller
2022-06-03 13:23     ` Christoph Hellwig
2022-06-05 10:00       ` Salvatore Bonaccorso
2022-06-06  7:49         ` Christoph Hellwig
2022-06-09  4:27     ` Christoph Hellwig
2022-06-09  7:10       ` Michael Schaller
2022-06-21  7:55         ` Michael Schaller
2022-06-03 12:46 Michael Schaller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).