diff options
author | Kent Overstreet <kmo@daterainc.com> | 2013-11-24 18:32:22 -0500 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2013-11-24 18:33:41 -0500 |
commit | c170bbb45febc03ac4d34ba2b8bb55e06104b7e7 (patch) | |
tree | ab1d6878c379b0eb59e58a1999e7c2d8c11ae303 /fs/btrfs/scrub.c | |
parent | 2c575026fae6e63771bd2a4c1d407214a8096a89 (diff) |
block: submit_bio_wait() conversions
It was being open coded in a few places.
Signed-off-by: Kent Overstreet <kmo@daterainc.com>
Cc: Jens Axboe <axboe@kernel.dk>
Cc: Joern Engel <joern@logfs.org>
Cc: Prasad Joshi <prasadjoshi.linux@gmail.com>
Cc: Neil Brown <neilb@suse.de>
Cc: Chris Mason <chris.mason@fusionio.com>
Acked-by: NeilBrown <neilb@suse.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'fs/btrfs/scrub.c')
-rw-r--r-- | fs/btrfs/scrub.c | 33 |
1 files changed, 4 insertions, 29 deletions
diff --git a/fs/btrfs/scrub.c b/fs/btrfs/scrub.c index 2544805544f0..3214ebe593bd 100644 --- a/fs/btrfs/scrub.c +++ b/fs/btrfs/scrub.c | |||
@@ -208,7 +208,6 @@ static void scrub_recheck_block_checksum(struct btrfs_fs_info *fs_info, | |||
208 | int is_metadata, int have_csum, | 208 | int is_metadata, int have_csum, |
209 | const u8 *csum, u64 generation, | 209 | const u8 *csum, u64 generation, |
210 | u16 csum_size); | 210 | u16 csum_size); |
211 | static void scrub_complete_bio_end_io(struct bio *bio, int err); | ||
212 | static int scrub_repair_block_from_good_copy(struct scrub_block *sblock_bad, | 211 | static int scrub_repair_block_from_good_copy(struct scrub_block *sblock_bad, |
213 | struct scrub_block *sblock_good, | 212 | struct scrub_block *sblock_good, |
214 | int force_write); | 213 | int force_write); |
@@ -1292,7 +1291,6 @@ static void scrub_recheck_block(struct btrfs_fs_info *fs_info, | |||
1292 | for (page_num = 0; page_num < sblock->page_count; page_num++) { | 1291 | for (page_num = 0; page_num < sblock->page_count; page_num++) { |
1293 | struct bio *bio; | 1292 | struct bio *bio; |
1294 | struct scrub_page *page = sblock->pagev[page_num]; | 1293 | struct scrub_page *page = sblock->pagev[page_num]; |
1295 | DECLARE_COMPLETION_ONSTACK(complete); | ||
1296 | 1294 | ||
1297 | if (page->dev->bdev == NULL) { | 1295 | if (page->dev->bdev == NULL) { |
1298 | page->io_error = 1; | 1296 | page->io_error = 1; |
@@ -1309,18 +1307,11 @@ static void scrub_recheck_block(struct btrfs_fs_info *fs_info, | |||
1309 | } | 1307 | } |
1310 | bio->bi_bdev = page->dev->bdev; | 1308 | bio->bi_bdev = page->dev->bdev; |
1311 | bio->bi_sector = page->physical >> 9; | 1309 | bio->bi_sector = page->physical >> 9; |
1312 | bio->bi_end_io = scrub_complete_bio_end_io; | ||
1313 | bio->bi_private = &complete; | ||
1314 | 1310 | ||
1315 | bio_add_page(bio, page->page, PAGE_SIZE, 0); | 1311 | bio_add_page(bio, page->page, PAGE_SIZE, 0); |
1316 | btrfsic_submit_bio(READ, bio); | 1312 | if (btrfsic_submit_bio_wait(READ, bio)) |
1317 | |||
1318 | /* this will also unplug the queue */ | ||
1319 | wait_for_completion(&complete); | ||
1320 | |||
1321 | page->io_error = !test_bit(BIO_UPTODATE, &bio->bi_flags); | ||
1322 | if (!test_bit(BIO_UPTODATE, &bio->bi_flags)) | ||
1323 | sblock->no_io_error_seen = 0; | 1313 | sblock->no_io_error_seen = 0; |
1314 | |||
1324 | bio_put(bio); | 1315 | bio_put(bio); |
1325 | } | 1316 | } |
1326 | 1317 | ||
@@ -1389,11 +1380,6 @@ static void scrub_recheck_block_checksum(struct btrfs_fs_info *fs_info, | |||
1389 | sblock->checksum_error = 1; | 1380 | sblock->checksum_error = 1; |
1390 | } | 1381 | } |
1391 | 1382 | ||
1392 | static void scrub_complete_bio_end_io(struct bio *bio, int err) | ||
1393 | { | ||
1394 | complete((struct completion *)bio->bi_private); | ||
1395 | } | ||
1396 | |||
1397 | static int scrub_repair_block_from_good_copy(struct scrub_block *sblock_bad, | 1383 | static int scrub_repair_block_from_good_copy(struct scrub_block *sblock_bad, |
1398 | struct scrub_block *sblock_good, | 1384 | struct scrub_block *sblock_good, |
1399 | int force_write) | 1385 | int force_write) |
@@ -1428,7 +1414,6 @@ static int scrub_repair_page_from_good_copy(struct scrub_block *sblock_bad, | |||
1428 | sblock_bad->checksum_error || page_bad->io_error) { | 1414 | sblock_bad->checksum_error || page_bad->io_error) { |
1429 | struct bio *bio; | 1415 | struct bio *bio; |
1430 | int ret; | 1416 | int ret; |
1431 | DECLARE_COMPLETION_ONSTACK(complete); | ||
1432 | 1417 | ||
1433 | if (!page_bad->dev->bdev) { | 1418 | if (!page_bad->dev->bdev) { |
1434 | printk_ratelimited(KERN_WARNING | 1419 | printk_ratelimited(KERN_WARNING |
@@ -1441,19 +1426,14 @@ static int scrub_repair_page_from_good_copy(struct scrub_block *sblock_bad, | |||
1441 | return -EIO; | 1426 | return -EIO; |
1442 | bio->bi_bdev = page_bad->dev->bdev; | 1427 | bio->bi_bdev = page_bad->dev->bdev; |
1443 | bio->bi_sector = page_bad->physical >> 9; | 1428 | bio->bi_sector = page_bad->physical >> 9; |
1444 | bio->bi_end_io = scrub_complete_bio_end_io; | ||
1445 | bio->bi_private = &complete; | ||
1446 | 1429 | ||
1447 | ret = bio_add_page(bio, page_good->page, PAGE_SIZE, 0); | 1430 | ret = bio_add_page(bio, page_good->page, PAGE_SIZE, 0); |
1448 | if (PAGE_SIZE != ret) { | 1431 | if (PAGE_SIZE != ret) { |
1449 | bio_put(bio); | 1432 | bio_put(bio); |
1450 | return -EIO; | 1433 | return -EIO; |
1451 | } | 1434 | } |
1452 | btrfsic_submit_bio(WRITE, bio); | ||
1453 | 1435 | ||
1454 | /* this will also unplug the queue */ | 1436 | if (btrfsic_submit_bio_wait(WRITE, bio)) { |
1455 | wait_for_completion(&complete); | ||
1456 | if (!bio_flagged(bio, BIO_UPTODATE)) { | ||
1457 | btrfs_dev_stat_inc_and_print(page_bad->dev, | 1437 | btrfs_dev_stat_inc_and_print(page_bad->dev, |
1458 | BTRFS_DEV_STAT_WRITE_ERRS); | 1438 | BTRFS_DEV_STAT_WRITE_ERRS); |
1459 | btrfs_dev_replace_stats_inc( | 1439 | btrfs_dev_replace_stats_inc( |
@@ -3373,7 +3353,6 @@ static int write_page_nocow(struct scrub_ctx *sctx, | |||
3373 | struct bio *bio; | 3353 | struct bio *bio; |
3374 | struct btrfs_device *dev; | 3354 | struct btrfs_device *dev; |
3375 | int ret; | 3355 | int ret; |
3376 | DECLARE_COMPLETION_ONSTACK(compl); | ||
3377 | 3356 | ||
3378 | dev = sctx->wr_ctx.tgtdev; | 3357 | dev = sctx->wr_ctx.tgtdev; |
3379 | if (!dev) | 3358 | if (!dev) |
@@ -3390,8 +3369,6 @@ static int write_page_nocow(struct scrub_ctx *sctx, | |||
3390 | spin_unlock(&sctx->stat_lock); | 3369 | spin_unlock(&sctx->stat_lock); |
3391 | return -ENOMEM; | 3370 | return -ENOMEM; |
3392 | } | 3371 | } |
3393 | bio->bi_private = &compl; | ||
3394 | bio->bi_end_io = scrub_complete_bio_end_io; | ||
3395 | bio->bi_size = 0; | 3372 | bio->bi_size = 0; |
3396 | bio->bi_sector = physical_for_dev_replace >> 9; | 3373 | bio->bi_sector = physical_for_dev_replace >> 9; |
3397 | bio->bi_bdev = dev->bdev; | 3374 | bio->bi_bdev = dev->bdev; |
@@ -3402,10 +3379,8 @@ leave_with_eio: | |||
3402 | btrfs_dev_stat_inc_and_print(dev, BTRFS_DEV_STAT_WRITE_ERRS); | 3379 | btrfs_dev_stat_inc_and_print(dev, BTRFS_DEV_STAT_WRITE_ERRS); |
3403 | return -EIO; | 3380 | return -EIO; |
3404 | } | 3381 | } |
3405 | btrfsic_submit_bio(WRITE_SYNC, bio); | ||
3406 | wait_for_completion(&compl); | ||
3407 | 3382 | ||
3408 | if (!test_bit(BIO_UPTODATE, &bio->bi_flags)) | 3383 | if (btrfsic_submit_bio_wait(WRITE_SYNC, bio)) |
3409 | goto leave_with_eio; | 3384 | goto leave_with_eio; |
3410 | 3385 | ||
3411 | bio_put(bio); | 3386 | bio_put(bio); |