From: Phillip Susi <psusi@ubuntu.com> To: Jens Axboe <axboe@kernel.dk> Cc: CAI Qian <caiqian@redhat.com>, Dave Chinner <david@fromorbit.com>, xfs@oss.sgi.com, LKML <linux-kernel@vger.kernel.org> Subject: Re: Loopback device hung [was Re: xfs deadlock on 3.9-rc5 running xfstests case #78] Date: Thu, 04 Apr 2013 16:30:54 -0400 [thread overview] Message-ID: <515DE2FE.1080201@ubuntu.com> (raw) In-Reply-To: <515C4D9D.10103@ubuntu.com> [-- Attachment #1.1: Type: text/plain, Size: 829 bytes --] > I have not tested it yet, but I am pretty sure it won't work. It > looks like the patch changes the BLKRRPART path to go ahead and remove > existing partitions when GENHD_FL_NO_PARTSCAN is set. loop doesn't > issue the BLKRRPART ioctl when !LO_FLAGS_PARTSCAN so this won't help. > I think loop needs to set GENHD_FL_NO_PARTSCAN and then issue the > ioctl regardless of the LO_FLAGS_PARTSCAN flag to get the partitions > to be removed. I will try to test tonight. After testing, my initial thoughts appeared to have been correct. I had to modify the patch as follows. To test, simply do: truncate -s 10m img losetup /dev/loop0 img parted /dev/loop0 mklabel msdos mkpart primary ext2 1m 2m quit ls /dev/loop0* Note the /dev/loop0p1 node. Run losetup -d /dev/loop0 and see if it is still there. [-- Attachment #1.2: loop.diff --] [-- Type: text/plain, Size: 1722 bytes --] diff --git a/block/ioctl.c b/block/ioctl.c index a31d91d..8b78b5a 100644 --- a/block/ioctl.c +++ b/block/ioctl.c @@ -155,7 +155,7 @@ static int blkdev_reread_part(struct block_device *bdev) struct gendisk *disk = bdev->bd_disk; int res; - if (!disk_part_scan_enabled(disk) || bdev != bdev->bd_contains) + if (bdev != bdev->bd_contains) return -EINVAL; if (!capable(CAP_SYS_ADMIN)) return -EACCES; diff --git a/block/partition-generic.c b/block/partition-generic.c index 1cb4dec..0e7d637 100644 --- a/block/partition-generic.c +++ b/block/partition-generic.c @@ -430,6 +430,15 @@ rescan: disk->fops->revalidate_disk(disk); check_disk_size_change(disk, bdev); bdev->bd_invalidated = 0; + + /* + * If partition scanning is disabled, we are done. + */ + if (!disk_part_scan_enabled(disk)) { + kobject_uevent(&disk_to_dev(disk)->kobj, KOBJ_CHANGE); + return 0; + } + if (!get_capacity(disk) || !(state = check_partition(disk, bdev))) return 0; if (IS_ERR(state)) { diff --git a/drivers/block/loop.c b/drivers/block/loop.c index 8bc6d39..326fac9 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c @@ -1039,11 +1039,9 @@ static int loop_clr_fd(struct loop_device *lo) lo->lo_state = Lo_unbound; /* This is safe: open() is still holding a reference. */ module_put(THIS_MODULE); - if (lo->lo_flags & LO_FLAGS_PARTSCAN && bdev) - ioctl_by_bdev(bdev, BLKRRPART, 0); + lo->lo_disk->flags |= GENHD_FL_NO_PART_SCAN; + ioctl_by_bdev(bdev, BLKRRPART, 0); lo->lo_flags = 0; - if (!part_shift) - lo->lo_disk->flags |= GENHD_FL_NO_PART_SCAN; mutex_unlock(&lo->lo_ctl_mutex); /* * Need not hold lo_ctl_mutex to fput backing file. [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 553 bytes --]
WARNING: multiple messages have this Message-ID (diff)
From: Phillip Susi <psusi@ubuntu.com> To: Jens Axboe <axboe@kernel.dk> Cc: LKML <linux-kernel@vger.kernel.org>, CAI Qian <caiqian@redhat.com>, xfs@oss.sgi.com Subject: Re: Loopback device hung [was Re: xfs deadlock on 3.9-rc5 running xfstests case #78] Date: Thu, 04 Apr 2013 16:30:54 -0400 [thread overview] Message-ID: <515DE2FE.1080201@ubuntu.com> (raw) In-Reply-To: <515C4D9D.10103@ubuntu.com> [-- Attachment #1.1.1: Type: text/plain, Size: 829 bytes --] > I have not tested it yet, but I am pretty sure it won't work. It > looks like the patch changes the BLKRRPART path to go ahead and remove > existing partitions when GENHD_FL_NO_PARTSCAN is set. loop doesn't > issue the BLKRRPART ioctl when !LO_FLAGS_PARTSCAN so this won't help. > I think loop needs to set GENHD_FL_NO_PARTSCAN and then issue the > ioctl regardless of the LO_FLAGS_PARTSCAN flag to get the partitions > to be removed. I will try to test tonight. After testing, my initial thoughts appeared to have been correct. I had to modify the patch as follows. To test, simply do: truncate -s 10m img losetup /dev/loop0 img parted /dev/loop0 mklabel msdos mkpart primary ext2 1m 2m quit ls /dev/loop0* Note the /dev/loop0p1 node. Run losetup -d /dev/loop0 and see if it is still there. [-- Attachment #1.1.2: loop.diff --] [-- Type: text/plain, Size: 1722 bytes --] diff --git a/block/ioctl.c b/block/ioctl.c index a31d91d..8b78b5a 100644 --- a/block/ioctl.c +++ b/block/ioctl.c @@ -155,7 +155,7 @@ static int blkdev_reread_part(struct block_device *bdev) struct gendisk *disk = bdev->bd_disk; int res; - if (!disk_part_scan_enabled(disk) || bdev != bdev->bd_contains) + if (bdev != bdev->bd_contains) return -EINVAL; if (!capable(CAP_SYS_ADMIN)) return -EACCES; diff --git a/block/partition-generic.c b/block/partition-generic.c index 1cb4dec..0e7d637 100644 --- a/block/partition-generic.c +++ b/block/partition-generic.c @@ -430,6 +430,15 @@ rescan: disk->fops->revalidate_disk(disk); check_disk_size_change(disk, bdev); bdev->bd_invalidated = 0; + + /* + * If partition scanning is disabled, we are done. + */ + if (!disk_part_scan_enabled(disk)) { + kobject_uevent(&disk_to_dev(disk)->kobj, KOBJ_CHANGE); + return 0; + } + if (!get_capacity(disk) || !(state = check_partition(disk, bdev))) return 0; if (IS_ERR(state)) { diff --git a/drivers/block/loop.c b/drivers/block/loop.c index 8bc6d39..326fac9 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c @@ -1039,11 +1039,9 @@ static int loop_clr_fd(struct loop_device *lo) lo->lo_state = Lo_unbound; /* This is safe: open() is still holding a reference. */ module_put(THIS_MODULE); - if (lo->lo_flags & LO_FLAGS_PARTSCAN && bdev) - ioctl_by_bdev(bdev, BLKRRPART, 0); + lo->lo_disk->flags |= GENHD_FL_NO_PART_SCAN; + ioctl_by_bdev(bdev, BLKRRPART, 0); lo->lo_flags = 0; - if (!part_shift) - lo->lo_disk->flags |= GENHD_FL_NO_PART_SCAN; mutex_unlock(&lo->lo_ctl_mutex); /* * Need not hold lo_ctl_mutex to fput backing file. [-- Attachment #1.2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 553 bytes --] [-- Attachment #2: Type: text/plain, Size: 121 bytes --] _______________________________________________ xfs mailing list xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs
next prev parent reply other threads:[~2013-04-04 20:31 UTC|newest] Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top [not found] <1462091996.435156.1364882416199.JavaMail.root@redhat.com> 2013-04-02 6:08 ` xfs deadlock on 3.9-rc5 running xfstests case #78 CAI Qian 2013-04-02 6:08 ` CAI Qian 2013-04-02 7:05 ` Loopback device hung [was Re: xfs deadlock on 3.9-rc5 running xfstests case #78] Dave Chinner 2013-04-02 7:05 ` Dave Chinner 2013-04-02 7:19 ` Jens Axboe 2013-04-02 7:19 ` Jens Axboe 2013-04-02 7:30 ` Jens Axboe 2013-04-02 7:30 ` Jens Axboe 2013-04-02 8:39 ` CAI Qian 2013-04-02 8:39 ` CAI Qian 2013-04-02 9:00 ` Jens Axboe 2013-04-02 9:00 ` Jens Axboe 2013-04-02 9:31 ` CAI Qian 2013-04-02 9:31 ` CAI Qian 2013-04-02 9:48 ` Jens Axboe 2013-04-02 9:48 ` Jens Axboe 2013-04-03 11:41 ` Jens Axboe 2013-04-03 11:41 ` Jens Axboe 2013-04-03 15:41 ` Phillip Susi 2013-04-03 15:41 ` Phillip Susi 2013-04-04 20:30 ` Phillip Susi [this message] 2013-04-04 20:30 ` Phillip Susi 2013-04-09 6:55 ` Dave Chinner 2013-04-09 6:55 ` Dave Chinner 2013-04-09 7:01 ` Jens Axboe 2013-04-09 7:01 ` Jens Axboe 2013-04-09 7:08 ` Dave Chinner 2013-04-09 7:08 ` Dave Chinner 2013-04-10 7:24 ` Jens Axboe 2013-04-10 7:24 ` Jens Axboe 2013-05-28 14:51 ` Phillip Susi 2013-05-28 14:51 ` Phillip Susi
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=515DE2FE.1080201@ubuntu.com \ --to=psusi@ubuntu.com \ --cc=axboe@kernel.dk \ --cc=caiqian@redhat.com \ --cc=david@fromorbit.com \ --cc=linux-kernel@vger.kernel.org \ --cc=xfs@oss.sgi.com \ /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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.