OSDN Git Service

btrfs: remove buffer_heads from btrfsic_process_written_block()
authorJohannes Thumshirn <johannes.thumshirn@wdc.com>
Thu, 13 Feb 2020 15:24:35 +0000 (00:24 +0900)
committerDavid Sterba <dsterba@suse.com>
Mon, 23 Mar 2020 16:01:40 +0000 (17:01 +0100)
Now that the last caller of btrfsic_process_written_block() with
buffer_heads is gone, remove the buffer_head processing path from it as
well.

Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Reviewed-by: Nikolay Borisov <nborisov@suse.com>
Signed-off-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/check-integrity.c

index e750798..4f6db2f 100644 (file)
@@ -152,11 +152,8 @@ struct btrfsic_block {
        struct list_head ref_to_list;   /* list */
        struct list_head ref_from_list; /* list */
        struct btrfsic_block *next_in_same_bio;
-       void *orig_bio_bh_private;
-       union {
-               bio_end_io_t *bio;
-               bh_end_io_t *bh;
-       } orig_bio_bh_end_io;
+       void *orig_bio_private;
+       bio_end_io_t *orig_bio_end_io;
        int submit_bio_bh_rw;
        u64 flush_gen; /* only valid if !never_written */
 };
@@ -325,14 +322,12 @@ static void btrfsic_process_written_block(struct btrfsic_dev_state *dev_state,
                                          u64 dev_bytenr, char **mapped_datav,
                                          unsigned int num_pages,
                                          struct bio *bio, int *bio_is_patched,
-                                         struct buffer_head *bh,
                                          int submit_bio_bh_rw);
 static int btrfsic_process_written_superblock(
                struct btrfsic_state *state,
                struct btrfsic_block *const block,
                struct btrfs_super_block *const super_hdr);
 static void btrfsic_bio_end_io(struct bio *bp);
-static void btrfsic_bh_end_io(struct buffer_head *bh, int uptodate);
 static int btrfsic_is_block_ref_by_superblock(const struct btrfsic_state *state,
                                              const struct btrfsic_block *block,
                                              int recursion_level);
@@ -399,8 +394,8 @@ static void btrfsic_block_init(struct btrfsic_block *b)
        b->never_written = 0;
        b->mirror_num = 0;
        b->next_in_same_bio = NULL;
-       b->orig_bio_bh_private = NULL;
-       b->orig_bio_bh_end_io.bio = NULL;
+       b->orig_bio_private = NULL;
+       b->orig_bio_end_io = NULL;
        INIT_LIST_HEAD(&b->collision_resolving_node);
        INIT_LIST_HEAD(&b->all_blocks_node);
        INIT_LIST_HEAD(&b->ref_to_list);
@@ -1743,7 +1738,6 @@ static void btrfsic_process_written_block(struct btrfsic_dev_state *dev_state,
                                          u64 dev_bytenr, char **mapped_datav,
                                          unsigned int num_pages,
                                          struct bio *bio, int *bio_is_patched,
-                                         struct buffer_head *bh,
                                          int submit_bio_bh_rw)
 {
        int is_metadata;
@@ -1902,9 +1896,9 @@ again:
                                block->is_iodone = 0;
                                BUG_ON(NULL == bio_is_patched);
                                if (!*bio_is_patched) {
-                                       block->orig_bio_bh_private =
+                                       block->orig_bio_private =
                                            bio->bi_private;
-                                       block->orig_bio_bh_end_io.bio =
+                                       block->orig_bio_end_io =
                                            bio->bi_end_io;
                                        block->next_in_same_bio = NULL;
                                        bio->bi_private = block;
@@ -1916,25 +1910,17 @@ again:
                                            bio->bi_private;
 
                                        BUG_ON(NULL == chained_block);
-                                       block->orig_bio_bh_private =
-                                           chained_block->orig_bio_bh_private;
-                                       block->orig_bio_bh_end_io.bio =
-                                           chained_block->orig_bio_bh_end_io.
-                                           bio;
+                                       block->orig_bio_private =
+                                           chained_block->orig_bio_private;
+                                       block->orig_bio_end_io =
+                                           chained_block->orig_bio_end_io;
                                        block->next_in_same_bio = chained_block;
                                        bio->bi_private = block;
                                }
-                       } else if (NULL != bh) {
-                               block->is_iodone = 0;
-                               block->orig_bio_bh_private = bh->b_private;
-                               block->orig_bio_bh_end_io.bh = bh->b_end_io;
-                               block->next_in_same_bio = NULL;
-                               bh->b_private = block;
-                               bh->b_end_io = btrfsic_bh_end_io;
                        } else {
                                block->is_iodone = 1;
-                               block->orig_bio_bh_private = NULL;
-                               block->orig_bio_bh_end_io.bio = NULL;
+                               block->orig_bio_private = NULL;
+                               block->orig_bio_end_io = NULL;
                                block->next_in_same_bio = NULL;
                        }
                }
@@ -2042,8 +2028,8 @@ again:
                        block->is_iodone = 0;
                        BUG_ON(NULL == bio_is_patched);
                        if (!*bio_is_patched) {
-                               block->orig_bio_bh_private = bio->bi_private;
-                               block->orig_bio_bh_end_io.bio = bio->bi_end_io;
+                               block->orig_bio_private = bio->bi_private;
+                               block->orig_bio_end_io = bio->bi_end_io;
                                block->next_in_same_bio = NULL;
                                bio->bi_private = block;
                                bio->bi_end_io = btrfsic_bio_end_io;
@@ -2054,24 +2040,17 @@ again:
                                    bio->bi_private;
 
                                BUG_ON(NULL == chained_block);
-                               block->orig_bio_bh_private =
-                                   chained_block->orig_bio_bh_private;
-                               block->orig_bio_bh_end_io.bio =
-                                   chained_block->orig_bio_bh_end_io.bio;
+                               block->orig_bio_private =
+                                   chained_block->orig_bio_private;
+                               block->orig_bio_end_io =
+                                   chained_block->orig_bio_end_io;
                                block->next_in_same_bio = chained_block;
                                bio->bi_private = block;
                        }
-               } else if (NULL != bh) {
-                       block->is_iodone = 0;
-                       block->orig_bio_bh_private = bh->b_private;
-                       block->orig_bio_bh_end_io.bh = bh->b_end_io;
-                       block->next_in_same_bio = NULL;
-                       bh->b_private = block;
-                       bh->b_end_io = btrfsic_bh_end_io;
                } else {
                        block->is_iodone = 1;
-                       block->orig_bio_bh_private = NULL;
-                       block->orig_bio_bh_end_io.bio = NULL;
+                       block->orig_bio_private = NULL;
+                       block->orig_bio_end_io = NULL;
                        block->next_in_same_bio = NULL;
                }
                if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
@@ -2112,8 +2091,8 @@ static void btrfsic_bio_end_io(struct bio *bp)
                iodone_w_error = 1;
 
        BUG_ON(NULL == block);
-       bp->bi_private = block->orig_bio_bh_private;
-       bp->bi_end_io = block->orig_bio_bh_end_io.bio;
+       bp->bi_private = block->orig_bio_private;
+       bp->bi_end_io = block->orig_bio_end_io;
 
        do {
                struct btrfsic_block *next_block;
@@ -2146,38 +2125,6 @@ static void btrfsic_bio_end_io(struct bio *bp)
        bp->bi_end_io(bp);
 }
 
-static void btrfsic_bh_end_io(struct buffer_head *bh, int uptodate)
-{
-       struct btrfsic_block *block = (struct btrfsic_block *)bh->b_private;
-       int iodone_w_error = !uptodate;
-       struct btrfsic_dev_state *dev_state;
-
-       BUG_ON(NULL == block);
-       dev_state = block->dev_state;
-       if ((dev_state->state->print_mask & BTRFSIC_PRINT_MASK_END_IO_BIO_BH))
-               pr_info("bh_end_io(error=%d) for %c @%llu (%s/%llu/%d)\n",
-                      iodone_w_error,
-                      btrfsic_get_block_type(dev_state->state, block),
-                      block->logical_bytenr, block->dev_state->name,
-                      block->dev_bytenr, block->mirror_num);
-
-       block->iodone_w_error = iodone_w_error;
-       if (block->submit_bio_bh_rw & REQ_PREFLUSH) {
-               dev_state->last_flush_gen++;
-               if ((dev_state->state->print_mask &
-                    BTRFSIC_PRINT_MASK_END_IO_BIO_BH))
-                       pr_info("bh_end_io() new %s flush_gen=%llu\n",
-                              dev_state->name, dev_state->last_flush_gen);
-       }
-       if (block->submit_bio_bh_rw & REQ_FUA)
-               block->flush_gen = 0; /* FUA completed means block is on disk */
-
-       bh->b_private = block->orig_bio_bh_private;
-       bh->b_end_io = block->orig_bio_bh_end_io.bh;
-       block->is_iodone = 1; /* for FLUSH, this releases the block */
-       bh->b_end_io(bh, uptodate);
-}
-
 static int btrfsic_process_written_superblock(
                struct btrfsic_state *state,
                struct btrfsic_block *const superblock,
@@ -2781,7 +2728,7 @@ static void __btrfsic_submit_bio(struct bio *bio)
                btrfsic_process_written_block(dev_state, dev_bytenr,
                                              mapped_datav, segs,
                                              bio, &bio_is_patched,
-                                             NULL, bio->bi_opf);
+                                             bio->bi_opf);
                bio_for_each_segment(bvec, bio, iter)
                        kunmap(bvec.bv_page);
                kfree(mapped_datav);
@@ -2805,8 +2752,8 @@ static void __btrfsic_submit_bio(struct bio *bio)
                        block->iodone_w_error = 0;
                        block->flush_gen = dev_state->last_flush_gen + 1;
                        block->submit_bio_bh_rw = bio->bi_opf;
-                       block->orig_bio_bh_private = bio->bi_private;
-                       block->orig_bio_bh_end_io.bio = bio->bi_end_io;
+                       block->orig_bio_private = bio->bi_private;
+                       block->orig_bio_end_io = bio->bi_end_io;
                        block->next_in_same_bio = NULL;
                        bio->bi_private = block;
                        bio->bi_end_io = btrfsic_bio_end_io;