summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>2011-04-15 11:38:29 -0400
committerKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>2011-04-15 11:38:29 -0400
commit976222e05ea5a9959ccf880d7a24efbf79b3c6cf (patch)
treefce26272d4f517d31a9c4fd41f2c7b43441ce259
parent1a95fe6e42cefc52c62c471ad87d7fe8643231df (diff)
xen/blkback: Move the check for misaligned I/O higher.
We move it up higher to be in same loop that actually computes the sector number. This way, all of the code that deals with verifying that the request is correct is all done before we do any of the page mapping, I/O submission, etc. Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
-rw-r--r--drivers/xen/blkback/blkback.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/drivers/xen/blkback/blkback.c b/drivers/xen/blkback/blkback.c
index 211b2005f96..9598e0fd0f9 100644
--- a/drivers/xen/blkback/blkback.c
+++ b/drivers/xen/blkback/blkback.c
@@ -521,6 +521,13 @@ static void dispatch_rw_block_io(struct blkif_st *blkif,
(req->u.rw.seg[i].last_sect < req->u.rw.seg[i].first_sect))
goto fail_response;
preq.nr_sects += seg[i].nsec;
+
+ if (((int)preq.sector_number|(int)seg[i].nsec) &
+ ((bdev_logical_block_size(preq.bdev) >> 9) - 1)) {
+ DPRINTK("Misaligned I/O request from domain %d",
+ blkif->domid);
+ goto fail_response;
+ }
}
if (vbd_translate(&preq, blkif, operation) != 0) {
@@ -542,13 +549,6 @@ static void dispatch_rw_block_io(struct blkif_st *blkif,
blkif_get(blkif);
for (i = 0; i < nseg; i++) {
- if (((int)preq.sector_number|(int)seg[i].nsec) &
- ((bdev_logical_block_size(preq.bdev) >> 9) - 1)) {
- DPRINTK("Misaligned I/O request from domain %d",
- blkif->domid);
- goto fail_put_bio;
- }
-
while ((bio == NULL) ||
(bio_add_page(bio,
blkbk->pending_page(pending_req, i),