]> git.ipfire.org Git - ipfire-2.x.git/blobdiff - src/patches/suse-2.6.27.31/patches.drivers/block-call-sync-on-cleanup
Reenabled linux-xen, added patches for Xen Kernel Version 2.6.27.31,
[ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.drivers / block-call-sync-on-cleanup
diff --git a/src/patches/suse-2.6.27.31/patches.drivers/block-call-sync-on-cleanup b/src/patches/suse-2.6.27.31/patches.drivers/block-call-sync-on-cleanup
new file mode 100644 (file)
index 0000000..634ec23
--- /dev/null
@@ -0,0 +1,34 @@
+Subject: block: blk_cleanup_queue() should call blk_sync_queue()
+From: Jens Axboe <jens.axboe@oracle.com>
+Date: Thu Oct 9 08:56:18 2008 +0200:
+Git: e3335de94067dbebe22e3962632ead34e832cb60
+
+When a driver calls blk_cleanup_queue(), the device should be fully idle.
+However, the block layer may have pending plugging timers and the IO
+schedulers may have pending work in the work queues. So quisce the device
+by waiting for the timer and flushing the work queues.
+
+Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
+Signed-off-by: Hannes Reinecke <hare@suse.de>
+
+---
+ block/blk-core.c |    8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+--- a/block/blk-core.c
++++ b/block/blk-core.c
+@@ -435,6 +435,14 @@ void blk_put_queue(struct request_queue 
+ void blk_cleanup_queue(struct request_queue *q)
+ {
++      /*
++       * We know we have process context here, so we can be a little
++       * cautious and ensure that pending block actions on this device
++       * are done before moving on. Going into this function, we should
++       * not have processes doing IO to this device.
++       */
++      blk_sync_queue(q);
++
+       mutex_lock(&q->sysfs_lock);
+       queue_flag_set_unlocked(QUEUE_FLAG_DEAD, q);
+       mutex_unlock(&q->sysfs_lock);