提交 314146e5 编写于 作者: T Tom Goetz 提交者: Konrad Rzeszutek Wilk

xen/blkback: Fix the WRITE_BARRIER

The WRITE_BARRIER was missing the REQ_WRITE option. This
was causing the blktap to die.
Signed-off-by: NTom Goetz <tom.goetz@virtualcomputer.com>
Signed-off-by: NKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
上级 a742b02c
...@@ -47,6 +47,8 @@ ...@@ -47,6 +47,8 @@
#include <asm/xen/hypercall.h> #include <asm/xen/hypercall.h>
#include "common.h" #include "common.h"
#define WRITE_BARRIER (REQ_WRITE | REQ_FLUSH | REQ_FUA)
/* /*
* These are rather arbitrary. They are fairly large because adjacent requests * These are rather arbitrary. They are fairly large because adjacent requests
* pulled from a communication ring are quite likely to end up being part of * pulled from a communication ring are quite likely to end up being part of
...@@ -420,7 +422,7 @@ static void dispatch_rw_block_io(blkif_t *blkif, ...@@ -420,7 +422,7 @@ static void dispatch_rw_block_io(blkif_t *blkif,
operation = WRITE; operation = WRITE;
break; break;
case BLKIF_OP_WRITE_BARRIER: case BLKIF_OP_WRITE_BARRIER:
operation = REQ_FLUSH | REQ_FUA; operation = WRITE_BARRIER;
break; break;
default: default:
operation = 0; /* make gcc happy */ operation = 0; /* make gcc happy */
...@@ -429,7 +431,7 @@ static void dispatch_rw_block_io(blkif_t *blkif, ...@@ -429,7 +431,7 @@ static void dispatch_rw_block_io(blkif_t *blkif,
/* Check that number of segments is sane. */ /* Check that number of segments is sane. */
nseg = req->nr_segments; nseg = req->nr_segments;
if (unlikely(nseg == 0 && operation != (REQ_FLUSH | REQ_FUA)) || if (unlikely(nseg == 0 && operation != WRITE_BARRIER) ||
unlikely(nseg > BLKIF_MAX_SEGMENTS_PER_REQUEST)) { unlikely(nseg > BLKIF_MAX_SEGMENTS_PER_REQUEST)) {
DPRINTK("Bad number of segments in request (%d)\n", nseg); DPRINTK("Bad number of segments in request (%d)\n", nseg);
goto fail_response; goto fail_response;
...@@ -537,7 +539,7 @@ static void dispatch_rw_block_io(blkif_t *blkif, ...@@ -537,7 +539,7 @@ static void dispatch_rw_block_io(blkif_t *blkif,
} }
if (!bio) { if (!bio) {
BUG_ON(operation != (REQ_FLUSH | REQ_FUA)); BUG_ON(operation != WRITE_BARRIER);
bio = bio_alloc(GFP_KERNEL, 0); bio = bio_alloc(GFP_KERNEL, 0);
if (unlikely(bio == NULL)) if (unlikely(bio == NULL))
goto fail_put_bio; goto fail_put_bio;
...@@ -552,7 +554,7 @@ static void dispatch_rw_block_io(blkif_t *blkif, ...@@ -552,7 +554,7 @@ static void dispatch_rw_block_io(blkif_t *blkif,
if (operation == READ) if (operation == READ)
blkif->st_rd_sect += preq.nr_sects; blkif->st_rd_sect += preq.nr_sects;
else if (operation == WRITE || operation == (REQ_FLUSH | REQ_FUA)) else if (operation == WRITE || operation == WRITE_BARRIER)
blkif->st_wr_sect += preq.nr_sects; blkif->st_wr_sect += preq.nr_sects;
return; return;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册