forked from Minki/linux
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: 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>
This commit is contained in:
parent
61ecc5fc18
commit
59aaad503f
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user