diff options
Diffstat (limited to 'fs/btrfs/check-integrity.c')
| -rw-r--r-- | fs/btrfs/check-integrity.c | 32 | 
1 files changed, 13 insertions, 19 deletions
diff --git a/fs/btrfs/check-integrity.c b/fs/btrfs/check-integrity.c index b50764bef14..131d82800b3 100644 --- a/fs/btrfs/check-integrity.c +++ b/fs/btrfs/check-integrity.c @@ -333,7 +333,6 @@ static void btrfsic_release_block_ctx(struct btrfsic_block_data_ctx *block_ctx);  static int btrfsic_read_block(struct btrfsic_state *state,  			      struct btrfsic_block_data_ctx *block_ctx);  static void btrfsic_dump_database(struct btrfsic_state *state); -static void btrfsic_complete_bio_end_io(struct bio *bio, int err);  static int btrfsic_test_for_metadata(struct btrfsic_state *state,  				     char **datav, unsigned int num_pages);  static void btrfsic_process_written_block(struct btrfsic_dev_state *dev_state, @@ -1687,7 +1686,6 @@ static int btrfsic_read_block(struct btrfsic_state *state,  	for (i = 0; i < num_pages;) {  		struct bio *bio;  		unsigned int j; -		DECLARE_COMPLETION_ONSTACK(complete);  		bio = btrfs_io_bio_alloc(GFP_NOFS, num_pages - i);  		if (!bio) { @@ -1698,8 +1696,6 @@ static int btrfsic_read_block(struct btrfsic_state *state,  		}  		bio->bi_bdev = block_ctx->dev->bdev;  		bio->bi_sector = dev_bytenr >> 9; -		bio->bi_end_io = btrfsic_complete_bio_end_io; -		bio->bi_private = &complete;  		for (j = i; j < num_pages; j++) {  			ret = bio_add_page(bio, block_ctx->pagev[j], @@ -1712,12 +1708,7 @@ static int btrfsic_read_block(struct btrfsic_state *state,  			       "btrfsic: error, failed to add a single page!\n");  			return -1;  		} -		submit_bio(READ, bio); - -		/* this will also unplug the queue */ -		wait_for_completion(&complete); - -		if (!test_bit(BIO_UPTODATE, &bio->bi_flags)) { +		if (submit_bio_wait(READ, bio)) {  			printk(KERN_INFO  			       "btrfsic: read error at logical %llu dev %s!\n",  			       block_ctx->start, block_ctx->dev->name); @@ -1740,11 +1731,6 @@ static int btrfsic_read_block(struct btrfsic_state *state,  	return block_ctx->len;  } -static void btrfsic_complete_bio_end_io(struct bio *bio, int err) -{ -	complete((struct completion *)bio->bi_private); -} -  static void btrfsic_dump_database(struct btrfsic_state *state)  {  	struct list_head *elem_all; @@ -3008,14 +2994,12 @@ int btrfsic_submit_bh(int rw, struct buffer_head *bh)  	return submit_bh(rw, bh);  } -void btrfsic_submit_bio(int rw, struct bio *bio) +static void __btrfsic_submit_bio(int rw, struct bio *bio)  {  	struct btrfsic_dev_state *dev_state; -	if (!btrfsic_is_initialized) { -		submit_bio(rw, bio); +	if (!btrfsic_is_initialized)  		return; -	}  	mutex_lock(&btrfsic_mutex);  	/* since btrfsic_submit_bio() is also called before @@ -3106,10 +3090,20 @@ void btrfsic_submit_bio(int rw, struct bio *bio)  	}  leave:  	mutex_unlock(&btrfsic_mutex); +} +void btrfsic_submit_bio(int rw, struct bio *bio) +{ +	__btrfsic_submit_bio(rw, bio);  	submit_bio(rw, bio);  } +int btrfsic_submit_bio_wait(int rw, struct bio *bio) +{ +	__btrfsic_submit_bio(rw, bio); +	return submit_bio_wait(rw, bio); +} +  int btrfsic_mount(struct btrfs_root *root,  		  struct btrfs_fs_devices *fs_devices,  		  int including_extent_data, u32 print_mask)  | 
