Commit 59aaad50 authored by Johannes Thumshirn's avatar Johannes Thumshirn Committed by David Sterba

btrfs: remove buffer_heads from btrfsic_process_written_block()

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: default avatarJosef Bacik <josef@toxicpanda.com>
Reviewed-by: default avatarNikolay Borisov <nborisov@suse.com>
Signed-off-by: default avatarJohannes Thumshirn <johannes.thumshirn@wdc.com>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 61ecc5fc
...@@ -152,11 +152,8 @@ struct btrfsic_block { ...@@ -152,11 +152,8 @@ struct btrfsic_block {
struct list_head ref_to_list; /* list */ struct list_head ref_to_list; /* list */
struct list_head ref_from_list; /* list */ struct list_head ref_from_list; /* list */
struct btrfsic_block *next_in_same_bio; struct btrfsic_block *next_in_same_bio;
void *orig_bio_bh_private; void *orig_bio_private;
union { bio_end_io_t *orig_bio_end_io;
bio_end_io_t *bio;
bh_end_io_t *bh;
} orig_bio_bh_end_io;
int submit_bio_bh_rw; int submit_bio_bh_rw;
u64 flush_gen; /* only valid if !never_written */ u64 flush_gen; /* only valid if !never_written */
}; };
...@@ -325,14 +322,12 @@ static void btrfsic_process_written_block(struct btrfsic_dev_state *dev_state, ...@@ -325,14 +322,12 @@ static void btrfsic_process_written_block(struct btrfsic_dev_state *dev_state,
u64 dev_bytenr, char **mapped_datav, u64 dev_bytenr, char **mapped_datav,
unsigned int num_pages, unsigned int num_pages,
struct bio *bio, int *bio_is_patched, struct bio *bio, int *bio_is_patched,
struct buffer_head *bh,
int submit_bio_bh_rw); int submit_bio_bh_rw);
static int btrfsic_process_written_superblock( static int btrfsic_process_written_superblock(
struct btrfsic_state *state, struct btrfsic_state *state,
struct btrfsic_block *const block, struct btrfsic_block *const block,
struct btrfs_super_block *const super_hdr); struct btrfs_super_block *const super_hdr);
static void btrfsic_bio_end_io(struct bio *bp); 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, static int btrfsic_is_block_ref_by_superblock(const struct btrfsic_state *state,
const struct btrfsic_block *block, const struct btrfsic_block *block,
int recursion_level); int recursion_level);
...@@ -399,8 +394,8 @@ static void btrfsic_block_init(struct btrfsic_block *b) ...@@ -399,8 +394,8 @@ static void btrfsic_block_init(struct btrfsic_block *b)
b->never_written = 0; b->never_written = 0;
b->mirror_num = 0; b->mirror_num = 0;
b->next_in_same_bio = NULL; b->next_in_same_bio = NULL;
b->orig_bio_bh_private = NULL; b->orig_bio_private = NULL;
b->orig_bio_bh_end_io.bio = NULL; b->orig_bio_end_io = NULL;
INIT_LIST_HEAD(&b->collision_resolving_node); INIT_LIST_HEAD(&b->collision_resolving_node);
INIT_LIST_HEAD(&b->all_blocks_node); INIT_LIST_HEAD(&b->all_blocks_node);
INIT_LIST_HEAD(&b->ref_to_list); INIT_LIST_HEAD(&b->ref_to_list);
...@@ -1743,7 +1738,6 @@ static void btrfsic_process_written_block(struct btrfsic_dev_state *dev_state, ...@@ -1743,7 +1738,6 @@ static void btrfsic_process_written_block(struct btrfsic_dev_state *dev_state,
u64 dev_bytenr, char **mapped_datav, u64 dev_bytenr, char **mapped_datav,
unsigned int num_pages, unsigned int num_pages,
struct bio *bio, int *bio_is_patched, struct bio *bio, int *bio_is_patched,
struct buffer_head *bh,
int submit_bio_bh_rw) int submit_bio_bh_rw)
{ {
int is_metadata; int is_metadata;
...@@ -1902,9 +1896,9 @@ static void btrfsic_process_written_block(struct btrfsic_dev_state *dev_state, ...@@ -1902,9 +1896,9 @@ static void btrfsic_process_written_block(struct btrfsic_dev_state *dev_state,
block->is_iodone = 0; block->is_iodone = 0;
BUG_ON(NULL == bio_is_patched); BUG_ON(NULL == bio_is_patched);
if (!*bio_is_patched) { if (!*bio_is_patched) {
block->orig_bio_bh_private = block->orig_bio_private =
bio->bi_private; bio->bi_private;
block->orig_bio_bh_end_io.bio = block->orig_bio_end_io =
bio->bi_end_io; bio->bi_end_io;
block->next_in_same_bio = NULL; block->next_in_same_bio = NULL;
bio->bi_private = block; bio->bi_private = block;
...@@ -1916,25 +1910,17 @@ static void btrfsic_process_written_block(struct btrfsic_dev_state *dev_state, ...@@ -1916,25 +1910,17 @@ static void btrfsic_process_written_block(struct btrfsic_dev_state *dev_state,
bio->bi_private; bio->bi_private;
BUG_ON(NULL == chained_block); BUG_ON(NULL == chained_block);
block->orig_bio_bh_private = block->orig_bio_private =
chained_block->orig_bio_bh_private; chained_block->orig_bio_private;
block->orig_bio_bh_end_io.bio = block->orig_bio_end_io =
chained_block->orig_bio_bh_end_io. chained_block->orig_bio_end_io;
bio;
block->next_in_same_bio = chained_block; block->next_in_same_bio = chained_block;
bio->bi_private = 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 { } else {
block->is_iodone = 1; block->is_iodone = 1;
block->orig_bio_bh_private = NULL; block->orig_bio_private = NULL;
block->orig_bio_bh_end_io.bio = NULL; block->orig_bio_end_io = NULL;
block->next_in_same_bio = NULL; block->next_in_same_bio = NULL;
} }
} }
...@@ -2042,8 +2028,8 @@ static void btrfsic_process_written_block(struct btrfsic_dev_state *dev_state, ...@@ -2042,8 +2028,8 @@ static void btrfsic_process_written_block(struct btrfsic_dev_state *dev_state,
block->is_iodone = 0; block->is_iodone = 0;
BUG_ON(NULL == bio_is_patched); BUG_ON(NULL == bio_is_patched);
if (!*bio_is_patched) { if (!*bio_is_patched) {
block->orig_bio_bh_private = bio->bi_private; block->orig_bio_private = bio->bi_private;
block->orig_bio_bh_end_io.bio = bio->bi_end_io; block->orig_bio_end_io = bio->bi_end_io;
block->next_in_same_bio = NULL; block->next_in_same_bio = NULL;
bio->bi_private = block; bio->bi_private = block;
bio->bi_end_io = btrfsic_bio_end_io; bio->bi_end_io = btrfsic_bio_end_io;
...@@ -2054,24 +2040,17 @@ static void btrfsic_process_written_block(struct btrfsic_dev_state *dev_state, ...@@ -2054,24 +2040,17 @@ static void btrfsic_process_written_block(struct btrfsic_dev_state *dev_state,
bio->bi_private; bio->bi_private;
BUG_ON(NULL == chained_block); BUG_ON(NULL == chained_block);
block->orig_bio_bh_private = block->orig_bio_private =
chained_block->orig_bio_bh_private; chained_block->orig_bio_private;
block->orig_bio_bh_end_io.bio = block->orig_bio_end_io =
chained_block->orig_bio_bh_end_io.bio; chained_block->orig_bio_end_io;
block->next_in_same_bio = chained_block; block->next_in_same_bio = chained_block;
bio->bi_private = 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 { } else {
block->is_iodone = 1; block->is_iodone = 1;
block->orig_bio_bh_private = NULL; block->orig_bio_private = NULL;
block->orig_bio_bh_end_io.bio = NULL; block->orig_bio_end_io = NULL;
block->next_in_same_bio = NULL; block->next_in_same_bio = NULL;
} }
if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE) if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
...@@ -2112,8 +2091,8 @@ static void btrfsic_bio_end_io(struct bio *bp) ...@@ -2112,8 +2091,8 @@ static void btrfsic_bio_end_io(struct bio *bp)
iodone_w_error = 1; iodone_w_error = 1;
BUG_ON(NULL == block); BUG_ON(NULL == block);
bp->bi_private = block->orig_bio_bh_private; bp->bi_private = block->orig_bio_private;
bp->bi_end_io = block->orig_bio_bh_end_io.bio; bp->bi_end_io = block->orig_bio_end_io;
do { do {
struct btrfsic_block *next_block; struct btrfsic_block *next_block;
...@@ -2146,38 +2125,6 @@ static void btrfsic_bio_end_io(struct bio *bp) ...@@ -2146,38 +2125,6 @@ static void btrfsic_bio_end_io(struct bio *bp)
bp->bi_end_io(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( static int btrfsic_process_written_superblock(
struct btrfsic_state *state, struct btrfsic_state *state,
struct btrfsic_block *const superblock, struct btrfsic_block *const superblock,
...@@ -2781,7 +2728,7 @@ static void __btrfsic_submit_bio(struct bio *bio) ...@@ -2781,7 +2728,7 @@ static void __btrfsic_submit_bio(struct bio *bio)
btrfsic_process_written_block(dev_state, dev_bytenr, btrfsic_process_written_block(dev_state, dev_bytenr,
mapped_datav, segs, mapped_datav, segs,
bio, &bio_is_patched, bio, &bio_is_patched,
NULL, bio->bi_opf); bio->bi_opf);
bio_for_each_segment(bvec, bio, iter) bio_for_each_segment(bvec, bio, iter)
kunmap(bvec.bv_page); kunmap(bvec.bv_page);
kfree(mapped_datav); kfree(mapped_datav);
...@@ -2805,8 +2752,8 @@ static void __btrfsic_submit_bio(struct bio *bio) ...@@ -2805,8 +2752,8 @@ static void __btrfsic_submit_bio(struct bio *bio)
block->iodone_w_error = 0; block->iodone_w_error = 0;
block->flush_gen = dev_state->last_flush_gen + 1; block->flush_gen = dev_state->last_flush_gen + 1;
block->submit_bio_bh_rw = bio->bi_opf; block->submit_bio_bh_rw = bio->bi_opf;
block->orig_bio_bh_private = bio->bi_private; block->orig_bio_private = bio->bi_private;
block->orig_bio_bh_end_io.bio = bio->bi_end_io; block->orig_bio_end_io = bio->bi_end_io;
block->next_in_same_bio = NULL; block->next_in_same_bio = NULL;
bio->bi_private = block; bio->bi_private = block;
bio->bi_end_io = btrfsic_bio_end_io; bio->bi_end_io = btrfsic_bio_end_io;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment