]> xenbits.xensource.com Git - legacy/linux-2.6.18-xen.git/commitdiff
blktap: fix race memory refernce with ring_ok.
authorKeir Fraser <keir.fraser@citrix.com>
Tue, 28 Apr 2009 12:43:06 +0000 (13:43 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Tue, 28 Apr 2009 12:43:06 +0000 (13:43 +0100)
fix race memory refernce with ring_ok.
ring_ok is shared by mmapping process and blktap kernel thread.

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
drivers/xen/blktap/blktap.c

index 97bd1e838483275649a81a1e64e92c31cf7ec7b7..28895bbbb01b55998a9542e5dc3b39b9e4cff38f 100644 (file)
@@ -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 "