Merge branch 'for-linus-4.3' of git://git.kernel.org/pub/scm/linux/kernel/git/mason...
[linux-2.6-block.git] / fs / btrfs / scrub.c
index c69c75e7b841e167b83c3992b42ef207d0f10bc5..9a11db0c47ee7bc1b51d8f79226a9a25f7a3b8eb 100644 (file)
@@ -279,7 +279,7 @@ static int scrub_pages(struct scrub_ctx *sctx, u64 logical, u64 len,
                       u64 physical, struct btrfs_device *dev, u64 flags,
                       u64 gen, int mirror_num, u8 *csum, int force,
                       u64 physical_for_dev_replace);
-static void scrub_bio_end_io(struct bio *bio, int err);
+static void scrub_bio_end_io(struct bio *bio);
 static void scrub_bio_end_io_worker(struct btrfs_work *work);
 static void scrub_block_complete(struct scrub_block *sblock);
 static void scrub_remap_extent(struct btrfs_fs_info *fs_info,
@@ -296,7 +296,7 @@ static void scrub_free_wr_ctx(struct scrub_wr_ctx *wr_ctx);
 static int scrub_add_page_to_wr_bio(struct scrub_ctx *sctx,
                                    struct scrub_page *spage);
 static void scrub_wr_submit(struct scrub_ctx *sctx);
-static void scrub_wr_bio_end_io(struct bio *bio, int err);
+static void scrub_wr_bio_end_io(struct bio *bio);
 static void scrub_wr_bio_end_io_worker(struct btrfs_work *work);
 static int write_page_nocow(struct scrub_ctx *sctx,
                            u64 physical_for_dev_replace, struct page *page);
@@ -464,27 +464,14 @@ struct scrub_ctx *scrub_setup_ctx(struct btrfs_device *dev, int is_dev_replace)
        struct scrub_ctx *sctx;
        int             i;
        struct btrfs_fs_info *fs_info = dev->dev_root->fs_info;
-       int pages_per_rd_bio;
        int ret;
 
-       /*
-        * the setting of pages_per_rd_bio is correct for scrub but might
-        * be wrong for the dev_replace code where we might read from
-        * different devices in the initial huge bios. However, that
-        * code is able to correctly handle the case when adding a page
-        * to a bio fails.
-        */
-       if (dev->bdev)
-               pages_per_rd_bio = min_t(int, SCRUB_PAGES_PER_RD_BIO,
-                                        bio_get_nr_vecs(dev->bdev));
-       else
-               pages_per_rd_bio = SCRUB_PAGES_PER_RD_BIO;
        sctx = kzalloc(sizeof(*sctx), GFP_NOFS);
        if (!sctx)
                goto nomem;
        atomic_set(&sctx->refs, 1);
        sctx->is_dev_replace = is_dev_replace;
-       sctx->pages_per_rd_bio = pages_per_rd_bio;
+       sctx->pages_per_rd_bio = SCRUB_PAGES_PER_RD_BIO;
        sctx->curr = -1;
        sctx->dev_root = dev->dev_root;
        for (i = 0; i < SCRUB_BIOS_PER_SCTX; ++i) {
@@ -1439,11 +1426,11 @@ struct scrub_bio_ret {
        int error;
 };
 
-static void scrub_bio_wait_endio(struct bio *bio, int error)
+static void scrub_bio_wait_endio(struct bio *bio)
 {
        struct scrub_bio_ret *ret = bio->bi_private;
 
-       ret->error = error;
+       ret->error = bio->bi_error;
        complete(&ret->event);
 }
 
@@ -1800,12 +1787,12 @@ static void scrub_wr_submit(struct scrub_ctx *sctx)
        btrfsic_submit_bio(WRITE, sbio->bio);
 }
 
-static void scrub_wr_bio_end_io(struct bio *bio, int err)
+static void scrub_wr_bio_end_io(struct bio *bio)
 {
        struct scrub_bio *sbio = bio->bi_private;
        struct btrfs_fs_info *fs_info = sbio->dev->dev_root->fs_info;
 
-       sbio->err = err;
+       sbio->err = bio->bi_error;
        sbio->bio = bio;
 
        btrfs_init_work(&sbio->work, btrfs_scrubwrc_helper,
@@ -2174,12 +2161,12 @@ again:
        return 0;
 }
 
-static void scrub_missing_raid56_end_io(struct bio *bio, int error)
+static void scrub_missing_raid56_end_io(struct bio *bio)
 {
        struct scrub_block *sblock = bio->bi_private;
        struct btrfs_fs_info *fs_info = sblock->sctx->dev_root->fs_info;
 
-       if (error)
+       if (bio->bi_error)
                sblock->no_io_error_seen = 0;
 
        btrfs_queue_work(fs_info->scrub_workers, &sblock->work);
@@ -2392,12 +2379,12 @@ leave_nomem:
        return 0;
 }
 
-static void scrub_bio_end_io(struct bio *bio, int err)
+static void scrub_bio_end_io(struct bio *bio)
 {
        struct scrub_bio *sbio = bio->bi_private;
        struct btrfs_fs_info *fs_info = sbio->dev->dev_root->fs_info;
 
-       sbio->err = err;
+       sbio->err = bio->bi_error;
        sbio->bio = bio;
 
        btrfs_queue_work(fs_info->scrub_workers, &sbio->work);
@@ -2809,11 +2796,11 @@ static void scrub_parity_bio_endio_worker(struct btrfs_work *work)
        scrub_pending_bio_dec(sctx);
 }
 
-static void scrub_parity_bio_endio(struct bio *bio, int error)
+static void scrub_parity_bio_endio(struct bio *bio)
 {
        struct scrub_parity *sparity = (struct scrub_parity *)bio->bi_private;
 
-       if (error)
+       if (bio->bi_error)
                bitmap_or(sparity->ebitmap, sparity->ebitmap, sparity->dbitmap,
                          sparity->nsectors);
 
@@ -4072,8 +4059,7 @@ static int scrub_setup_wr_ctx(struct scrub_ctx *sctx,
                return 0;
 
        WARN_ON(!dev->bdev);
-       wr_ctx->pages_per_wr_bio = min_t(int, SCRUB_PAGES_PER_WR_BIO,
-                                        bio_get_nr_vecs(dev->bdev));
+       wr_ctx->pages_per_wr_bio = SCRUB_PAGES_PER_WR_BIO;
        wr_ctx->tgtdev = dev;
        atomic_set(&wr_ctx->flush_all_writes, 0);
        return 0;