|
Fix queue unplugging in blkback driver.: msg#00487emulators.xen.cvs
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) |
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| Previous by Date: | Merge: 00487, BitKeeper Bot |
|---|---|
| Next by Date: | Merge firebug.cl.cam.ac.uk:/auto/groups/xeno-xenod/BK/xen-2.0-testing.bk: 00487, BitKeeper Bot |
| Previous by Thread: | Merge freefall.cl.cam.ac.uk:/auto/groups/xeno-xenod/BK/xen-2.0-testing.bki: 00487, BitKeeper Bot |
| Next by Thread: | Fix queue unplugging in blkback driver.: 00487, BitKeeper Bot |
| Indexes: | [Date] [Thread] [Top] [All Lists] |
| News | FAQ | advertise |