rpms/kernel/F-11 linux-2.6-xen-fix_warning_when_deleting_gendisk.patch, NONE, 1.1 linux-2.6-xen-xenbus_state_transition_when_not_connected.patch, NONE, 1.1 kernel.spec, 1.1608, 1.1609

Justin M. Forbes jforbes at fedoraproject.org
Mon May 18 17:24:49 UTC 2009


Author: jforbes

Update of /cvs/pkgs/rpms/kernel/F-11
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv14274

Modified Files:
	kernel.spec 
Added Files:
	linux-2.6-xen-fix_warning_when_deleting_gendisk.patch 
	linux-2.6-xen-xenbus_state_transition_when_not_connected.patch 
Log Message:
- xen/blkfront: fix warning when deleting gendisk on unplug/shutdown. BZ# 499621
- xen/blkfront: allow xenbus state transition to closing->closed when
  not connected


linux-2.6-xen-fix_warning_when_deleting_gendisk.patch:

--- NEW FILE linux-2.6-xen-fix_warning_when_deleting_gendisk.patch ---
Currently blkfront gives a warning when hot unplugging due to calling
del_gendisk() with interrupts disabled (due to blkif_io_lock).

WARNING: at kernel/softirq.c:124 local_bh_enable+0x36/0x84()
Modules linked in: xenfs xen_netfront ext3 jbd mbcache xen_blkfront
Pid: 13, comm: xenwatch Not tainted 2.6.29-xs5.5.0.13 #3
Call Trace:
 [<c012611c>] warn_slowpath+0x80/0xb6
 [<c0104cf1>] xen_sched_clock+0x16/0x63
 [<c0104710>] xen_force_evtchn_callback+0xc/0x10
 [<c0104e32>] check_events+0x8/0xe
 [<c0104d9b>] xen_restore_fl_direct_end+0x0/0x1
 [<c0103749>] xen_mc_flush+0x10a/0x13f
 [<c0105bd2>] __switch_to+0x114/0x14e
 [<c011d92b>] dequeue_task+0x62/0x70
 [<c0123b6f>] finish_task_switch+0x2b/0x84
 [<c0299877>] schedule+0x66d/0x6e7
 [<c0104710>] xen_force_evtchn_callback+0xc/0x10
 [<c0104710>] xen_force_evtchn_callback+0xc/0x10
 [<c012a642>] local_bh_enable+0x36/0x84
 [<c022f9a7>] sk_filter+0x57/0x5c
 [<c0233dae>] netlink_broadcast+0x1d5/0x315
 [<c01c6371>] kobject_uevent_env+0x28d/0x331
 [<c01e7ead>] device_del+0x10f/0x120
 [<c01e7ec6>] device_unregister+0x8/0x10
 [<c015f86d>] bdi_unregister+0x2d/0x39
 [<c01bf6f4>] unlink_gendisk+0x23/0x3e
 [<c01ac946>] del_gendisk+0x7b/0xe7
 [<d0828c19>] blkfront_closing+0x28/0x6e [xen_blkfront]
 [<d082900c>] backend_changed+0x3ad/0x41d [xen_blkfront]

We can fix this by calling del_gendisk() later in blkfront_closing, after
releasing blkif_io_lock. Since the queue is stopped during the interrupts
disabled phase I don't think there is any danger of an event occuring between
releasing the blkif_io_lock and deleting the disk.

Signed-off-by: Ian Campbell <ian.campbell at citrix.com>
Cc: Jeremy Fitzhardinge <jeremy at goop.org>
---
 drivers/block/xen-blkfront.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
index 8f90508..aa0c94b 100644
--- a/drivers/block/xen-blkfront.c
+++ b/drivers/block/xen-blkfront.c
@@ -934,8 +934,6 @@ static void blkfront_closing(struct xenbus_device *dev)
 
 	spin_lock_irqsave(&blkif_io_lock, flags);
 
-	del_gendisk(info->gd);
-
 	/* No more blkif_request(). */
 	blk_stop_queue(info->rq);
 
@@ -949,6 +947,8 @@ static void blkfront_closing(struct xenbus_device *dev)
 	blk_cleanup_queue(info->rq);
 	info->rq = NULL;
 
+	del_gendisk(info->gd);
+
  out:
 	xenbus_frontend_closed(dev);
 }
-- 
1.5.6.5


linux-2.6-xen-xenbus_state_transition_when_not_connected.patch:

--- NEW FILE linux-2.6-xen-xenbus_state_transition_when_not_connected.patch ---
This situation can occur when attempting to attach a block device whose backend
is an empty physical CD-ROM driver. The backend in this case will go directly
from the Initialising state to Closing->Closed. Previously this would result in
a NULL pointer deref on info->gd (xenbus_dev_fatal does not return as a1a15ac5
seems to expect)

Signed-off-by: Ian Campbell <ian.campbell at citrix.com>
Cc: Jeremy Fitzhardinge <jeremy at goop.org>
---
 drivers/block/xen-blkfront.c |    6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
index aa0c94b..a6cbf7b 100644
--- a/drivers/block/xen-blkfront.c
+++ b/drivers/block/xen-blkfront.c
@@ -977,8 +977,10 @@ static void backend_changed(struct xenbus_device *dev,
 		break;
 
 	case XenbusStateClosing:
-		if (info->gd == NULL)
-			xenbus_dev_fatal(dev, -ENODEV, "gd is NULL");
+		if (info->gd == NULL) {
+			xenbus_frontend_closed(dev);
+			break;
+		}
 		bd = bdget_disk(info->gd, 0);
 		if (bd == NULL)
 			xenbus_dev_fatal(dev, -ENODEV, "bdget failed");
-- 
1.5.6.5



Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/kernel.spec,v
retrieving revision 1.1608
retrieving revision 1.1609
diff -u -p -r1.1608 -r1.1609
--- kernel.spec	18 May 2009 13:37:45 -0000	1.1608
+++ kernel.spec	18 May 2009 17:23:49 -0000	1.1609
@@ -752,6 +752,8 @@ Patch9003: linux-2.6-dropwatch-protocol.
 # kvm fixes
 Patch9303: linux-2.6-kvm-skip-pit-check.patch
 Patch9304: linux-2.6-xen-check-for-nx-support.patch
+Patch9305: linux-2.6-xen-fix_warning_when_deleting_gendisk.patch
+Patch9306: linux-2.6-xen-xenbus_state_transition_when_not_connected.patch
 
 %endif
 
@@ -1395,6 +1397,8 @@ ApplyPatch linux-2.6-dropwatch-protocol.
 # kvm fixes
 ApplyPatch linux-2.6-kvm-skip-pit-check.patch
 ApplyPatch linux-2.6-xen-check-for-nx-support.patch
+ApplyPatch linux-2.6-xen-fix_warning_when_deleting_gendisk.patch
+ApplyPatch linux-2.6-xen-xenbus_state_transition_when_not_connected.patch
 
 
 # END OF PATCH APPLICATIONS
@@ -1983,6 +1987,11 @@ fi
 # and build.
 
 %changelog
+* Mon May 18 2009 Justin M. Forbes <jforbes at redhat.com>
+- xen/blkfront: fix warning when deleting gendisk on unplug/shutdown. BZ# 499621
+- xen/blkfront: allow xenbus state transition to closing->closed when
+  not connected
+
 * Mon May 18 2009 Josef Bacik <josef at toxicpanda.com>
 - fix page_mkwrite in btrfs
 




More information about the scm-commits mailing list