[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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |