From d4ccc87f4bd32388d4187ab6acbf9adf5273e525 Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Tue, 28 Apr 2009 13:43:06 +0100 Subject: [PATCH] blktap: fix race memory refernce with ring_ok. fix race memory refernce with ring_ok. ring_ok is shared by mmapping process and blktap kernel thread. Signed-off-by: Isaku Yamahata --- drivers/xen/blktap/blktap.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/xen/blktap/blktap.c b/drivers/xen/blktap/blktap.c index 97bd1e83..28895bbb 100644 --- a/drivers/xen/blktap/blktap.c +++ b/drivers/xen/blktap/blktap.c @@ -617,6 +617,9 @@ static int blktap_release(struct inode *inode, struct file *filp) if (!info) return 0; + info->ring_ok = 0; + smp_wmb(); + info->dev_inuse = 0; DPRINTK("Freeing device [/dev/xen/blktap%d]\n",info->minor); @@ -717,6 +720,7 @@ static int blktap_mmap(struct file *filp, struct vm_area_struct *vma) #endif info->vma = vma; + smp_wmb(); info->ring_ok = 1; return 0; fail: @@ -1390,6 +1394,7 @@ static void dispatch_rw_block_io(blkif_t *blkif, WPRINTK("blktap: ring not ready for requests!\n"); goto fail_response; } + smp_rmb(); if (RING_FULL(&info->ufe_ring)) { WPRINTK("blktap: fe_ring is full, can't add " -- 2.39.5