aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/scrub.c
diff options
context:
space:
mode:
authorKent Overstreet <kmo@daterainc.com>2013-11-24 18:32:22 -0500
committerJens Axboe <axboe@kernel.dk>2013-11-24 18:33:41 -0500
commitc170bbb45febc03ac4d34ba2b8bb55e06104b7e7 (patch)
treeab1d6878c379b0eb59e58a1999e7c2d8c11ae303 /fs/btrfs/scrub.c
parent2c575026fae6e63771bd2a4c1d407214a8096a89 (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.c33
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);
211static void scrub_complete_bio_end_io(struct bio *bio, int err);
212static int scrub_repair_block_from_good_copy(struct scrub_block *sblock_bad, 211static 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
1392static void scrub_complete_bio_end_io(struct bio *bio, int err)
1393{
1394 complete((struct completion *)bio->bi_private);
1395}
1396
1397static int scrub_repair_block_from_good_copy(struct scrub_block *sblock_bad, 1383static 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);