diff options
-rw-r--r-- | drivers/md/dm-io.c | 11 | ||||
-rw-r--r-- | drivers/md/dm-kcopyd.c | 2 | ||||
-rw-r--r-- | drivers/md/dm-raid1.c | 2 |
3 files changed, 11 insertions, 4 deletions
diff --git a/drivers/md/dm-io.c b/drivers/md/dm-io.c index ed9c86cd053e..4789c42d9a3a 100644 --- a/drivers/md/dm-io.c +++ b/drivers/md/dm-io.c | |||
@@ -353,7 +353,7 @@ static int sync_io(struct dm_io_client *client, unsigned int num_regions, | |||
353 | { | 353 | { |
354 | struct io io; | 354 | struct io io; |
355 | 355 | ||
356 | if (num_regions > 1 && rw != WRITE) { | 356 | if (num_regions > 1 && (rw & RW_MASK) != WRITE) { |
357 | WARN_ON(1); | 357 | WARN_ON(1); |
358 | return -EIO; | 358 | return -EIO; |
359 | } | 359 | } |
@@ -390,7 +390,7 @@ static int async_io(struct dm_io_client *client, unsigned int num_regions, | |||
390 | { | 390 | { |
391 | struct io *io; | 391 | struct io *io; |
392 | 392 | ||
393 | if (num_regions > 1 && rw != WRITE) { | 393 | if (num_regions > 1 && (rw & RW_MASK) != WRITE) { |
394 | WARN_ON(1); | 394 | WARN_ON(1); |
395 | fn(1, context); | 395 | fn(1, context); |
396 | return -EIO; | 396 | return -EIO; |
@@ -436,7 +436,12 @@ static int dp_init(struct dm_io_request *io_req, struct dpages *dp) | |||
436 | } | 436 | } |
437 | 437 | ||
438 | /* | 438 | /* |
439 | * New collapsed (a)synchronous interface | 439 | * New collapsed (a)synchronous interface. |
440 | * | ||
441 | * If the IO is asynchronous (i.e. it has notify.fn), you must either unplug | ||
442 | * the queue with blk_unplug() some time later or set the BIO_RW_SYNC bit in | ||
443 | * io_req->bi_rw. If you fail to do one of these, the IO will be submitted to | ||
444 | * the disk after q->unplug_delay, which defaults to 3ms in blk-settings.c. | ||
440 | */ | 445 | */ |
441 | int dm_io(struct dm_io_request *io_req, unsigned num_regions, | 446 | int dm_io(struct dm_io_request *io_req, unsigned num_regions, |
442 | struct dm_io_region *where, unsigned long *sync_error_bits) | 447 | struct dm_io_region *where, unsigned long *sync_error_bits) |
diff --git a/drivers/md/dm-kcopyd.c b/drivers/md/dm-kcopyd.c index ee9583bee04d..996802b8a452 100644 --- a/drivers/md/dm-kcopyd.c +++ b/drivers/md/dm-kcopyd.c | |||
@@ -332,7 +332,7 @@ static int run_io_job(struct kcopyd_job *job) | |||
332 | { | 332 | { |
333 | int r; | 333 | int r; |
334 | struct dm_io_request io_req = { | 334 | struct dm_io_request io_req = { |
335 | .bi_rw = job->rw, | 335 | .bi_rw = job->rw | (1 << BIO_RW_SYNC), |
336 | .mem.type = DM_IO_PAGE_LIST, | 336 | .mem.type = DM_IO_PAGE_LIST, |
337 | .mem.ptr.pl = job->pages, | 337 | .mem.ptr.pl = job->pages, |
338 | .mem.offset = job->offset, | 338 | .mem.offset = job->offset, |
diff --git a/drivers/md/dm-raid1.c b/drivers/md/dm-raid1.c index 3b9532fc294c..ff05fe893083 100644 --- a/drivers/md/dm-raid1.c +++ b/drivers/md/dm-raid1.c | |||
@@ -1297,6 +1297,8 @@ static void do_mirror(struct work_struct *work) | |||
1297 | do_reads(ms, &reads); | 1297 | do_reads(ms, &reads); |
1298 | do_writes(ms, &writes); | 1298 | do_writes(ms, &writes); |
1299 | do_failures(ms, &failures); | 1299 | do_failures(ms, &failures); |
1300 | |||
1301 | dm_table_unplug_all(ms->ti->table); | ||
1300 | } | 1302 | } |
1301 | 1303 | ||
1302 | 1304 | ||