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

[Xen-changelog] [linux-2.6.18-xen] blktap2: fix synchronization in blktap_device_run_queue()



# HG changeset patch
# User Keir Fraser <keir@xxxxxxx>
# Date 1290172806 0
# Node ID 75a121aacca6cb8a66ffa8791388d1eb7809e9bf
# Parent  e73077b6d6bfe8f9073c2059671be7c9c391a194
blktap2: fix synchronization in blktap_device_run_queue()

c/s 896 (use of blk_rq_map_sg()) made the problem worse, but from what
I can tell there had been races (ring and stats updates) before. If
that's not a correct observation, a perhaps better solution might be
to move the struct scatterlist array out of struct blktap (and make it
e.g. an on-stack variable, the problem being that
blktap_device_process_request() has a pretty large stack frame
already - shrinking this might be possible by moving e.g. the
struct blktap_grant_table and struct blkif_request blkif_req instances
the other way if the locking change here is the right thing to do).

Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx>
---
 drivers/xen/blktap2/device.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff -r e73077b6d6bf -r 75a121aacca6 drivers/xen/blktap2/device.c
--- a/drivers/xen/blktap2/device.c      Wed Nov 17 17:16:52 2010 +0000
+++ b/drivers/xen/blktap2/device.c      Fri Nov 19 13:20:06 2010 +0000
@@ -888,7 +888,7 @@ blktap_device_run_queue(struct blktap *t
                blkdev_dequeue_request(req);
 
                spin_unlock_irq(&dev->lock);
-               down_read(&tap->tap_sem);
+               down_write(&tap->tap_sem);
 
                err = blktap_device_process_request(tap, request, req);
                if (!err)
@@ -898,7 +898,7 @@ blktap_device_run_queue(struct blktap *t
                        blktap_request_free(tap, request);
                }
 
-               up_read(&tap->tap_sem);
+               up_write(&tap->tap_sem);
                spin_lock_irq(&dev->lock);
        }
 

_______________________________________________
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®.