[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] Fix queue unplugging in blkback driver.



ChangeSet 1.1159.277.1, 2005/03/31 22:51:48+01:00, kaf24@xxxxxxxxxxxxxxxxxxxx

        Fix queue unplugging in blkback driver.
        Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>



 blkback.c |   16 +++++-----------
 common.h  |    2 --
 vbd.c     |    3 +++
 3 files changed, 8 insertions(+), 13 deletions(-)


diff -Nru a/linux-2.6.11-xen-sparse/drivers/xen/blkback/blkback.c 
b/linux-2.6.11-xen-sparse/drivers/xen/blkback/blkback.c
--- a/linux-2.6.11-xen-sparse/drivers/xen/blkback/blkback.c     2005-03-31 
17:03:07 -05:00
+++ b/linux-2.6.11-xen-sparse/drivers/xen/blkback/blkback.c     2005-03-31 
17:03:07 -05:00
@@ -68,16 +68,10 @@
 static kmem_cache_t *buffer_head_cachep;
 #else
 static request_queue_t *plugged_queue;
-void bdev_put(struct block_device *bdev)
+static inline void bdev_flush_queue(request_queue_t *q)
 {
-    request_queue_t *q = plugged_queue;
-    /* We might be giving up last reference to plugged queue. Flush if so. */
-    if ( (q != NULL) &&
-         (q == bdev_get_queue(bdev)) && 
-         (cmpxchg(&plugged_queue, q, NULL) == q) )
-        blk_run_queue(q);
-    /* It's now safe to drop the block device. */
-    blkdev_put(bdev);
+    if ( q->unplug_fn != NULL )
+        q->unplug_fn(q);
 }
 #endif
 
@@ -195,7 +189,7 @@
 #else
         if ( plugged_queue != NULL )
         {
-            blk_run_queue(plugged_queue);
+            bdev_flush_queue(plugged_queue);
             plugged_queue = NULL;
         }
 #endif
@@ -523,7 +517,7 @@
         if ( (q = bdev_get_queue(bio->bi_bdev)) != plugged_queue )
         {
             if ( plugged_queue != NULL )
-                blk_run_queue(plugged_queue);
+                bdev_flush_queue(plugged_queue);
             plugged_queue = q;
         }
 
diff -Nru a/linux-2.6.11-xen-sparse/drivers/xen/blkback/common.h 
b/linux-2.6.11-xen-sparse/drivers/xen/blkback/common.h
--- a/linux-2.6.11-xen-sparse/drivers/xen/blkback/common.h      2005-03-31 
17:03:07 -05:00
+++ b/linux-2.6.11-xen-sparse/drivers/xen/blkback/common.h      2005-03-31 
17:03:07 -05:00
@@ -30,10 +30,8 @@
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
 typedef struct rb_root rb_root_t;
 typedef struct rb_node rb_node_t;
-extern void bdev_put(struct block_device *bdev);
 #else
 struct block_device;
-#define bdev_put(_b) ((void)0)
 #endif
 
 typedef struct blkif_st {
diff -Nru a/linux-2.6.11-xen-sparse/drivers/xen/blkback/vbd.c 
b/linux-2.6.11-xen-sparse/drivers/xen/blkback/vbd.c
--- a/linux-2.6.11-xen-sparse/drivers/xen/blkback/vbd.c 2005-03-31 17:03:07 
-05:00
+++ b/linux-2.6.11-xen-sparse/drivers/xen/blkback/vbd.c 2005-03-31 17:03:07 
-05:00
@@ -14,6 +14,9 @@
 
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
 static dev_t vbd_map_devnum(blkif_pdev_t);
+#define bdev_put(_b) blkdev_put(_b)
+#else
+#define bdev_put(_b) ((void)0)
 #endif
 
 void vbd_create(blkif_be_vbd_create_t *create) 

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.