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 <yamah...@valinux.co.jp>

diff --git a/drivers/xen/blktap/blktap.c b/drivers/xen/blktap/blktap.c
--- a/drivers/xen/blktap/blktap.c
+++ b/drivers/xen/blktap/blktap.c
@@ -617,6 +617,9 @@ static int blktap_release(struct inode *
        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
 #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
                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 "
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 <yamah...@valinux.co.jp>

diff --git a/drivers/xen/blktap/blktap.c b/drivers/xen/blktap/blktap.c
--- a/drivers/xen/blktap/blktap.c
+++ b/drivers/xen/blktap/blktap.c
@@ -617,6 +617,9 @@ static int blktap_release(struct inode *
 	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
 #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
 		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 "
_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@lists.xensource.com
http://lists.xensource.com/xen-ia64-devel

Reply via email to