From patchwork Wed Jan 18 15:46:57 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [Oneiric,SRU] Fix loop device notificaitons. From: Ayan George X-Patchwork-Id: 136836 Message-Id: <4F16E971.8020800@canonical.com> To: kernel-team@lists.ubuntu.com Date: Wed, 18 Jan 2012 10:46:57 -0500 SRU Justification: Impact: The loop device does not emit a change uevent when autoreleasing a device. Programs that depend on uevents (like gvfs and ultimately Nautilus) never notice when loop devices are unmounted. Bug-Link: https://bugs.launchpad.net/ubuntu/+source/usb-creator/+bug/548546 Fix: Apply 8a9c594422ecad912d6470888acdee9a1236ad68 from linux mainline -- Pass a valid bdev pointer to loop_clr_fd() instead of NULL so that it will emit the uevent. The patch is very small and applies cleanly to ubuntu-oneiric. Testcase: (1) In a terminal, start udevadm in monitor mode: $ udevadm monitor (2) In another terminal, mount an ISO image using the loopback device: $ sudo mount -o loop -t iso9660 your_image.iso /mnt (3) Notice the change uevents that udevadm reports. (4) Unmount image: $ sudo umount /mnt (5) Note that udevadm does not report any changes. With the patch applied, you will see the kernel noticiations. >From 8a9c594422ecad912d6470888acdee9a1236ad68 Mon Sep 17 00:00:00 2001 From: Phillip Susi Date: Wed, 21 Sep 2011 10:02:13 +0200 Subject: [PATCH] drivers/block/loop.c: emit uevent on auto release The loopback driver failed to emit the change uevent when auto releasing the device. Fixed lo_release() to pass the bdev to loop_clr_fd() so it can emit the event. Signed-off-by: Phillip Susi Cc: Jens Axboe Cc: Ayan George Signed-off-by: Andrew Morton Signed-off-by: Jens Axboe --- drivers/block/loop.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/drivers/block/loop.c b/drivers/block/loop.c index b336433..c2ce03c 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c @@ -1583,7 +1583,7 @@ static int lo_release(struct gendisk *disk, fmode_t mode) * In autoclear mode, stop the loop thread * and remove configuration after last close. */ - err = loop_clr_fd(lo, NULL); + err = loop_clr_fd(lo, lo->lo_device); if (!err) goto out_unlocked; } else { -- 1.7.5.4