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>
if (!info)
return 0;
+ info->ring_ok = 0;
+ smp_wmb();
+
info->dev_inuse = 0;
DPRINTK("Freeing device [/dev/xen/blktap%d]\n",info->minor);
#endif
info->vma = vma;
+ smp_wmb();
info->ring_ok = 1;
return 0;
fail:
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 "