btrfs: use bio fields for op and flags

The bio REQ_OP and bi_rw rq_flag_bits are now always setup, so there is
no need to pass around the rq_flag_bits bits too. btrfs users should
should access the bio insead.

Signed-off-by: Mike Christie <mchristi@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Hannes Reinecke <hare@suse.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
This commit is contained in:
Mike Christie 2016-06-05 14:31:54 -05:00 committed by Jens Axboe
parent b3d3fa5199
commit 81a75f6781
9 changed files with 54 additions and 67 deletions

View File

@ -374,7 +374,7 @@ int btrfs_submit_compressed_write(struct inode *inode, u64 start,
page = compressed_pages[pg_index]; page = compressed_pages[pg_index];
page->mapping = inode->i_mapping; page->mapping = inode->i_mapping;
if (bio->bi_iter.bi_size) if (bio->bi_iter.bi_size)
ret = io_tree->ops->merge_bio_hook(WRITE, page, 0, ret = io_tree->ops->merge_bio_hook(page, 0,
PAGE_SIZE, PAGE_SIZE,
bio, 0); bio, 0);
else else
@ -402,7 +402,7 @@ int btrfs_submit_compressed_write(struct inode *inode, u64 start,
BUG_ON(ret); /* -ENOMEM */ BUG_ON(ret); /* -ENOMEM */
} }
ret = btrfs_map_bio(root, WRITE, bio, 0, 1); ret = btrfs_map_bio(root, bio, 0, 1);
BUG_ON(ret); /* -ENOMEM */ BUG_ON(ret); /* -ENOMEM */
bio_put(bio); bio_put(bio);
@ -433,7 +433,7 @@ int btrfs_submit_compressed_write(struct inode *inode, u64 start,
BUG_ON(ret); /* -ENOMEM */ BUG_ON(ret); /* -ENOMEM */
} }
ret = btrfs_map_bio(root, WRITE, bio, 0, 1); ret = btrfs_map_bio(root, bio, 0, 1);
BUG_ON(ret); /* -ENOMEM */ BUG_ON(ret); /* -ENOMEM */
bio_put(bio); bio_put(bio);
@ -659,7 +659,7 @@ int btrfs_submit_compressed_read(struct inode *inode, struct bio *bio,
page->index = em_start >> PAGE_SHIFT; page->index = em_start >> PAGE_SHIFT;
if (comp_bio->bi_iter.bi_size) if (comp_bio->bi_iter.bi_size)
ret = tree->ops->merge_bio_hook(READ, page, 0, ret = tree->ops->merge_bio_hook(page, 0,
PAGE_SIZE, PAGE_SIZE,
comp_bio, 0); comp_bio, 0);
else else
@ -690,8 +690,7 @@ int btrfs_submit_compressed_read(struct inode *inode, struct bio *bio,
sums += DIV_ROUND_UP(comp_bio->bi_iter.bi_size, sums += DIV_ROUND_UP(comp_bio->bi_iter.bi_size,
root->sectorsize); root->sectorsize);
ret = btrfs_map_bio(root, READ, comp_bio, ret = btrfs_map_bio(root, comp_bio, mirror_num, 0);
mirror_num, 0);
if (ret) { if (ret) {
bio->bi_error = ret; bio->bi_error = ret;
bio_endio(comp_bio); bio_endio(comp_bio);
@ -721,7 +720,7 @@ int btrfs_submit_compressed_read(struct inode *inode, struct bio *bio,
BUG_ON(ret); /* -ENOMEM */ BUG_ON(ret); /* -ENOMEM */
} }
ret = btrfs_map_bio(root, READ, comp_bio, mirror_num, 0); ret = btrfs_map_bio(root, comp_bio, mirror_num, 0);
if (ret) { if (ret) {
bio->bi_error = ret; bio->bi_error = ret;
bio_endio(comp_bio); bio_endio(comp_bio);

View File

@ -3091,7 +3091,7 @@ int btrfs_create_subvol_root(struct btrfs_trans_handle *trans,
struct btrfs_root *new_root, struct btrfs_root *new_root,
struct btrfs_root *parent_root, struct btrfs_root *parent_root,
u64 new_dirid); u64 new_dirid);
int btrfs_merge_bio_hook(int rw, struct page *page, unsigned long offset, int btrfs_merge_bio_hook(struct page *page, unsigned long offset,
size_t size, struct bio *bio, size_t size, struct bio *bio,
unsigned long bio_flags); unsigned long bio_flags);
int btrfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf); int btrfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf);

View File

@ -124,7 +124,6 @@ struct async_submit_bio {
struct list_head list; struct list_head list;
extent_submit_bio_hook_t *submit_bio_start; extent_submit_bio_hook_t *submit_bio_start;
extent_submit_bio_hook_t *submit_bio_done; extent_submit_bio_hook_t *submit_bio_done;
int rw;
int mirror_num; int mirror_num;
unsigned long bio_flags; unsigned long bio_flags;
/* /*
@ -797,7 +796,7 @@ static void run_one_async_start(struct btrfs_work *work)
int ret; int ret;
async = container_of(work, struct async_submit_bio, work); async = container_of(work, struct async_submit_bio, work);
ret = async->submit_bio_start(async->inode, async->rw, async->bio, ret = async->submit_bio_start(async->inode, async->bio,
async->mirror_num, async->bio_flags, async->mirror_num, async->bio_flags,
async->bio_offset); async->bio_offset);
if (ret) if (ret)
@ -830,9 +829,8 @@ static void run_one_async_done(struct btrfs_work *work)
return; return;
} }
async->submit_bio_done(async->inode, async->rw, async->bio, async->submit_bio_done(async->inode, async->bio, async->mirror_num,
async->mirror_num, async->bio_flags, async->bio_flags, async->bio_offset);
async->bio_offset);
} }
static void run_one_async_free(struct btrfs_work *work) static void run_one_async_free(struct btrfs_work *work)
@ -844,7 +842,7 @@ static void run_one_async_free(struct btrfs_work *work)
} }
int btrfs_wq_submit_bio(struct btrfs_fs_info *fs_info, struct inode *inode, int btrfs_wq_submit_bio(struct btrfs_fs_info *fs_info, struct inode *inode,
int rw, struct bio *bio, int mirror_num, struct bio *bio, int mirror_num,
unsigned long bio_flags, unsigned long bio_flags,
u64 bio_offset, u64 bio_offset,
extent_submit_bio_hook_t *submit_bio_start, extent_submit_bio_hook_t *submit_bio_start,
@ -857,7 +855,6 @@ int btrfs_wq_submit_bio(struct btrfs_fs_info *fs_info, struct inode *inode,
return -ENOMEM; return -ENOMEM;
async->inode = inode; async->inode = inode;
async->rw = rw;
async->bio = bio; async->bio = bio;
async->mirror_num = mirror_num; async->mirror_num = mirror_num;
async->submit_bio_start = submit_bio_start; async->submit_bio_start = submit_bio_start;
@ -903,9 +900,8 @@ static int btree_csum_one_bio(struct bio *bio)
return ret; return ret;
} }
static int __btree_submit_bio_start(struct inode *inode, int rw, static int __btree_submit_bio_start(struct inode *inode, struct bio *bio,
struct bio *bio, int mirror_num, int mirror_num, unsigned long bio_flags,
unsigned long bio_flags,
u64 bio_offset) u64 bio_offset)
{ {
/* /*
@ -915,7 +911,7 @@ static int __btree_submit_bio_start(struct inode *inode, int rw,
return btree_csum_one_bio(bio); return btree_csum_one_bio(bio);
} }
static int __btree_submit_bio_done(struct inode *inode, int rw, struct bio *bio, static int __btree_submit_bio_done(struct inode *inode, struct bio *bio,
int mirror_num, unsigned long bio_flags, int mirror_num, unsigned long bio_flags,
u64 bio_offset) u64 bio_offset)
{ {
@ -925,7 +921,7 @@ static int __btree_submit_bio_done(struct inode *inode, int rw, struct bio *bio,
* when we're called for a write, we're already in the async * when we're called for a write, we're already in the async
* submission context. Just jump into btrfs_map_bio * submission context. Just jump into btrfs_map_bio
*/ */
ret = btrfs_map_bio(BTRFS_I(inode)->root, rw, bio, mirror_num, 1); ret = btrfs_map_bio(BTRFS_I(inode)->root, bio, mirror_num, 1);
if (ret) { if (ret) {
bio->bi_error = ret; bio->bi_error = ret;
bio_endio(bio); bio_endio(bio);
@ -944,7 +940,7 @@ static int check_async_write(struct inode *inode, unsigned long bio_flags)
return 1; return 1;
} }
static int btree_submit_bio_hook(struct inode *inode, int rw, struct bio *bio, static int btree_submit_bio_hook(struct inode *inode, struct bio *bio,
int mirror_num, unsigned long bio_flags, int mirror_num, unsigned long bio_flags,
u64 bio_offset) u64 bio_offset)
{ {
@ -960,21 +956,19 @@ static int btree_submit_bio_hook(struct inode *inode, int rw, struct bio *bio,
bio, BTRFS_WQ_ENDIO_METADATA); bio, BTRFS_WQ_ENDIO_METADATA);
if (ret) if (ret)
goto out_w_error; goto out_w_error;
ret = btrfs_map_bio(BTRFS_I(inode)->root, rw, bio, ret = btrfs_map_bio(BTRFS_I(inode)->root, bio, mirror_num, 0);
mirror_num, 0);
} else if (!async) { } else if (!async) {
ret = btree_csum_one_bio(bio); ret = btree_csum_one_bio(bio);
if (ret) if (ret)
goto out_w_error; goto out_w_error;
ret = btrfs_map_bio(BTRFS_I(inode)->root, rw, bio, ret = btrfs_map_bio(BTRFS_I(inode)->root, bio, mirror_num, 0);
mirror_num, 0);
} else { } else {
/* /*
* kthread helpers are used to submit writes so that * kthread helpers are used to submit writes so that
* checksumming can happen in parallel across all CPUs * checksumming can happen in parallel across all CPUs
*/ */
ret = btrfs_wq_submit_bio(BTRFS_I(inode)->root->fs_info, ret = btrfs_wq_submit_bio(BTRFS_I(inode)->root->fs_info,
inode, rw, bio, mirror_num, 0, inode, bio, mirror_num, 0,
bio_offset, bio_offset,
__btree_submit_bio_start, __btree_submit_bio_start,
__btree_submit_bio_done); __btree_submit_bio_done);

View File

@ -122,7 +122,7 @@ void btrfs_csum_final(u32 crc, char *result);
int btrfs_bio_wq_end_io(struct btrfs_fs_info *info, struct bio *bio, int btrfs_bio_wq_end_io(struct btrfs_fs_info *info, struct bio *bio,
enum btrfs_wq_endio_type metadata); enum btrfs_wq_endio_type metadata);
int btrfs_wq_submit_bio(struct btrfs_fs_info *fs_info, struct inode *inode, int btrfs_wq_submit_bio(struct btrfs_fs_info *fs_info, struct inode *inode,
int rw, struct bio *bio, int mirror_num, struct bio *bio, int mirror_num,
unsigned long bio_flags, u64 bio_offset, unsigned long bio_flags, u64 bio_offset,
extent_submit_bio_hook_t *submit_bio_start, extent_submit_bio_hook_t *submit_bio_start,
extent_submit_bio_hook_t *submit_bio_done); extent_submit_bio_hook_t *submit_bio_done);

View File

@ -2418,8 +2418,7 @@ static int bio_readpage_error(struct bio *failed_bio, u64 phy_offset,
pr_debug("Repair Read Error: submitting new read[%#x] to this_mirror=%d, in_validation=%d\n", pr_debug("Repair Read Error: submitting new read[%#x] to this_mirror=%d, in_validation=%d\n",
read_mode, failrec->this_mirror, failrec->in_validation); read_mode, failrec->this_mirror, failrec->in_validation);
ret = tree->ops->submit_bio_hook(inode, read_mode, bio, ret = tree->ops->submit_bio_hook(inode, bio, failrec->this_mirror,
failrec->this_mirror,
failrec->bio_flags, 0); failrec->bio_flags, 0);
if (ret) { if (ret) {
free_io_failure(inode, failrec); free_io_failure(inode, failrec);
@ -2740,9 +2739,8 @@ static int __must_check submit_one_bio(struct bio *bio, int mirror_num,
bio_get(bio); bio_get(bio);
if (tree->ops && tree->ops->submit_bio_hook) if (tree->ops && tree->ops->submit_bio_hook)
ret = tree->ops->submit_bio_hook(page->mapping->host, ret = tree->ops->submit_bio_hook(page->mapping->host, bio,
bio->bi_rw, bio, mirror_num, mirror_num, bio_flags, start);
bio_flags, start);
else else
btrfsic_submit_bio(bio); btrfsic_submit_bio(bio);
@ -2756,8 +2754,8 @@ static int merge_bio(struct extent_io_tree *tree, struct page *page,
{ {
int ret = 0; int ret = 0;
if (tree->ops && tree->ops->merge_bio_hook) if (tree->ops && tree->ops->merge_bio_hook)
ret = tree->ops->merge_bio_hook(bio_op(bio), page, offset, size, ret = tree->ops->merge_bio_hook(page, offset, size, bio,
bio, bio_flags); bio_flags);
BUG_ON(ret < 0); BUG_ON(ret < 0);
return ret; return ret;

View File

@ -63,16 +63,16 @@ struct btrfs_root;
struct btrfs_io_bio; struct btrfs_io_bio;
struct io_failure_record; struct io_failure_record;
typedef int (extent_submit_bio_hook_t)(struct inode *inode, int rw, typedef int (extent_submit_bio_hook_t)(struct inode *inode, struct bio *bio,
struct bio *bio, int mirror_num, int mirror_num, unsigned long bio_flags,
unsigned long bio_flags, u64 bio_offset); u64 bio_offset);
struct extent_io_ops { struct extent_io_ops {
int (*fill_delalloc)(struct inode *inode, struct page *locked_page, int (*fill_delalloc)(struct inode *inode, struct page *locked_page,
u64 start, u64 end, int *page_started, u64 start, u64 end, int *page_started,
unsigned long *nr_written); unsigned long *nr_written);
int (*writepage_start_hook)(struct page *page, u64 start, u64 end); int (*writepage_start_hook)(struct page *page, u64 start, u64 end);
extent_submit_bio_hook_t *submit_bio_hook; extent_submit_bio_hook_t *submit_bio_hook;
int (*merge_bio_hook)(int rw, struct page *page, unsigned long offset, int (*merge_bio_hook)(struct page *page, unsigned long offset,
size_t size, struct bio *bio, size_t size, struct bio *bio,
unsigned long bio_flags); unsigned long bio_flags);
int (*readpage_io_failed_hook)(struct page *page, int failed_mirror); int (*readpage_io_failed_hook)(struct page *page, int failed_mirror);

View File

@ -1823,7 +1823,7 @@ static void btrfs_clear_bit_hook(struct inode *inode,
* extent_io.c merge_bio_hook, this must check the chunk tree to make sure * extent_io.c merge_bio_hook, this must check the chunk tree to make sure
* we don't create bios that span stripes or chunks * we don't create bios that span stripes or chunks
*/ */
int btrfs_merge_bio_hook(int rw, struct page *page, unsigned long offset, int btrfs_merge_bio_hook(struct page *page, unsigned long offset,
size_t size, struct bio *bio, size_t size, struct bio *bio,
unsigned long bio_flags) unsigned long bio_flags)
{ {
@ -1855,9 +1855,8 @@ int btrfs_merge_bio_hook(int rw, struct page *page, unsigned long offset,
* At IO completion time the cums attached on the ordered extent record * At IO completion time the cums attached on the ordered extent record
* are inserted into the btree * are inserted into the btree
*/ */
static int __btrfs_submit_bio_start(struct inode *inode, int rw, static int __btrfs_submit_bio_start(struct inode *inode, struct bio *bio,
struct bio *bio, int mirror_num, int mirror_num, unsigned long bio_flags,
unsigned long bio_flags,
u64 bio_offset) u64 bio_offset)
{ {
struct btrfs_root *root = BTRFS_I(inode)->root; struct btrfs_root *root = BTRFS_I(inode)->root;
@ -1876,14 +1875,14 @@ static int __btrfs_submit_bio_start(struct inode *inode, int rw,
* At IO completion time the cums attached on the ordered extent record * At IO completion time the cums attached on the ordered extent record
* are inserted into the btree * are inserted into the btree
*/ */
static int __btrfs_submit_bio_done(struct inode *inode, int rw, struct bio *bio, static int __btrfs_submit_bio_done(struct inode *inode, struct bio *bio,
int mirror_num, unsigned long bio_flags, int mirror_num, unsigned long bio_flags,
u64 bio_offset) u64 bio_offset)
{ {
struct btrfs_root *root = BTRFS_I(inode)->root; struct btrfs_root *root = BTRFS_I(inode)->root;
int ret; int ret;
ret = btrfs_map_bio(root, rw, bio, mirror_num, 1); ret = btrfs_map_bio(root, bio, mirror_num, 1);
if (ret) { if (ret) {
bio->bi_error = ret; bio->bi_error = ret;
bio_endio(bio); bio_endio(bio);
@ -1895,7 +1894,7 @@ static int __btrfs_submit_bio_done(struct inode *inode, int rw, struct bio *bio,
* extent_io.c submission hook. This does the right thing for csum calculation * extent_io.c submission hook. This does the right thing for csum calculation
* on write, or reading the csums from the tree before a read * on write, or reading the csums from the tree before a read
*/ */
static int btrfs_submit_bio_hook(struct inode *inode, int rw, struct bio *bio, static int btrfs_submit_bio_hook(struct inode *inode, struct bio *bio,
int mirror_num, unsigned long bio_flags, int mirror_num, unsigned long bio_flags,
u64 bio_offset) u64 bio_offset)
{ {
@ -1932,7 +1931,7 @@ static int btrfs_submit_bio_hook(struct inode *inode, int rw, struct bio *bio,
goto mapit; goto mapit;
/* we're doing a write, do the async checksumming */ /* we're doing a write, do the async checksumming */
ret = btrfs_wq_submit_bio(BTRFS_I(inode)->root->fs_info, ret = btrfs_wq_submit_bio(BTRFS_I(inode)->root->fs_info,
inode, rw, bio, mirror_num, inode, bio, mirror_num,
bio_flags, bio_offset, bio_flags, bio_offset,
__btrfs_submit_bio_start, __btrfs_submit_bio_start,
__btrfs_submit_bio_done); __btrfs_submit_bio_done);
@ -1944,7 +1943,7 @@ static int btrfs_submit_bio_hook(struct inode *inode, int rw, struct bio *bio,
} }
mapit: mapit:
ret = btrfs_map_bio(root, rw, bio, mirror_num, 0); ret = btrfs_map_bio(root, bio, mirror_num, 0);
out: out:
if (ret < 0) { if (ret < 0) {
@ -7778,7 +7777,7 @@ err:
} }
static inline int submit_dio_repair_bio(struct inode *inode, struct bio *bio, static inline int submit_dio_repair_bio(struct inode *inode, struct bio *bio,
int rw, int mirror_num) int mirror_num)
{ {
struct btrfs_root *root = BTRFS_I(inode)->root; struct btrfs_root *root = BTRFS_I(inode)->root;
int ret; int ret;
@ -7792,7 +7791,7 @@ static inline int submit_dio_repair_bio(struct inode *inode, struct bio *bio,
if (ret) if (ret)
goto err; goto err;
ret = btrfs_map_bio(root, rw, bio, mirror_num, 0); ret = btrfs_map_bio(root, bio, mirror_num, 0);
err: err:
bio_put(bio); bio_put(bio);
return ret; return ret;
@ -7877,8 +7876,7 @@ static int dio_read_error(struct inode *inode, struct bio *failed_bio,
"Repair DIO Read Error: submitting new dio read[%#x] to this_mirror=%d, in_validation=%d\n", "Repair DIO Read Error: submitting new dio read[%#x] to this_mirror=%d, in_validation=%d\n",
read_mode, failrec->this_mirror, failrec->in_validation); read_mode, failrec->this_mirror, failrec->in_validation);
ret = submit_dio_repair_bio(inode, bio, read_mode, ret = submit_dio_repair_bio(inode, bio, failrec->this_mirror);
failrec->this_mirror);
if (ret) { if (ret) {
free_io_failure(inode, failrec); free_io_failure(inode, failrec);
bio_put(bio); bio_put(bio);
@ -8168,7 +8166,7 @@ static void btrfs_endio_direct_write(struct bio *bio)
bio_put(bio); bio_put(bio);
} }
static int __btrfs_submit_bio_start_direct_io(struct inode *inode, int rw, static int __btrfs_submit_bio_start_direct_io(struct inode *inode,
struct bio *bio, int mirror_num, struct bio *bio, int mirror_num,
unsigned long bio_flags, u64 offset) unsigned long bio_flags, u64 offset)
{ {
@ -8261,7 +8259,7 @@ static inline int btrfs_lookup_and_bind_dio_csum(struct btrfs_root *root,
} }
static inline int __btrfs_submit_dio_bio(struct bio *bio, struct inode *inode, static inline int __btrfs_submit_dio_bio(struct bio *bio, struct inode *inode,
int rw, u64 file_offset, int skip_sum, u64 file_offset, int skip_sum,
int async_submit) int async_submit)
{ {
struct btrfs_dio_private *dip = bio->bi_private; struct btrfs_dio_private *dip = bio->bi_private;
@ -8286,8 +8284,7 @@ static inline int __btrfs_submit_dio_bio(struct bio *bio, struct inode *inode,
if (write && async_submit) { if (write && async_submit) {
ret = btrfs_wq_submit_bio(root->fs_info, ret = btrfs_wq_submit_bio(root->fs_info,
inode, rw, bio, 0, 0, inode, bio, 0, 0, file_offset,
file_offset,
__btrfs_submit_bio_start_direct_io, __btrfs_submit_bio_start_direct_io,
__btrfs_submit_bio_done); __btrfs_submit_bio_done);
goto err; goto err;
@ -8306,13 +8303,13 @@ static inline int __btrfs_submit_dio_bio(struct bio *bio, struct inode *inode,
goto err; goto err;
} }
map: map:
ret = btrfs_map_bio(root, rw, bio, 0, async_submit); ret = btrfs_map_bio(root, bio, 0, async_submit);
err: err:
bio_put(bio); bio_put(bio);
return ret; return ret;
} }
static int btrfs_submit_direct_hook(int rw, struct btrfs_dio_private *dip, static int btrfs_submit_direct_hook(struct btrfs_dio_private *dip,
int skip_sum) int skip_sum)
{ {
struct inode *inode = dip->inode; struct inode *inode = dip->inode;
@ -8372,7 +8369,7 @@ next_block:
* before we're done setting it up * before we're done setting it up
*/ */
atomic_inc(&dip->pending_bios); atomic_inc(&dip->pending_bios);
ret = __btrfs_submit_dio_bio(bio, inode, rw, ret = __btrfs_submit_dio_bio(bio, inode,
file_offset, skip_sum, file_offset, skip_sum,
async_submit); async_submit);
if (ret) { if (ret) {
@ -8416,7 +8413,7 @@ next_block:
} }
submit: submit:
ret = __btrfs_submit_dio_bio(bio, inode, rw, file_offset, skip_sum, ret = __btrfs_submit_dio_bio(bio, inode, file_offset, skip_sum,
async_submit); async_submit);
if (!ret) if (!ret)
return 0; return 0;
@ -8494,7 +8491,7 @@ static void btrfs_submit_direct(struct bio *dio_bio, struct inode *inode,
dio_data->unsubmitted_oe_range_end; dio_data->unsubmitted_oe_range_end;
} }
ret = btrfs_submit_direct_hook(dio_bio->bi_rw, dip, skip_sum); ret = btrfs_submit_direct_hook(dip, skip_sum);
if (!ret) if (!ret)
return; return;

View File

@ -6053,7 +6053,7 @@ static noinline void btrfs_schedule_bio(struct btrfs_root *root,
static void submit_stripe_bio(struct btrfs_root *root, struct btrfs_bio *bbio, static void submit_stripe_bio(struct btrfs_root *root, struct btrfs_bio *bbio,
struct bio *bio, u64 physical, int dev_nr, struct bio *bio, u64 physical, int dev_nr,
int rw, int async) int async)
{ {
struct btrfs_device *dev = bbio->stripes[dev_nr].dev; struct btrfs_device *dev = bbio->stripes[dev_nr].dev;
@ -6061,15 +6061,14 @@ static void submit_stripe_bio(struct btrfs_root *root, struct btrfs_bio *bbio,
btrfs_io_bio(bio)->stripe_index = dev_nr; btrfs_io_bio(bio)->stripe_index = dev_nr;
bio->bi_end_io = btrfs_end_bio; bio->bi_end_io = btrfs_end_bio;
bio->bi_iter.bi_sector = physical >> 9; bio->bi_iter.bi_sector = physical >> 9;
bio->bi_rw |= rw;
#ifdef DEBUG #ifdef DEBUG
{ {
struct rcu_string *name; struct rcu_string *name;
rcu_read_lock(); rcu_read_lock();
name = rcu_dereference(dev->name); name = rcu_dereference(dev->name);
pr_debug("btrfs_map_bio: rw %d, sector=%llu, dev=%lu " pr_debug("btrfs_map_bio: rw %d 0x%x, sector=%llu, dev=%lu "
"(%s id %llu), size=%u\n", rw, "(%s id %llu), size=%u\n", bio_op(bio), bio->bi_rw,
(u64)bio->bi_iter.bi_sector, (u_long)dev->bdev->bd_dev, (u64)bio->bi_iter.bi_sector, (u_long)dev->bdev->bd_dev,
name->str, dev->devid, bio->bi_iter.bi_size); name->str, dev->devid, bio->bi_iter.bi_size);
rcu_read_unlock(); rcu_read_unlock();
@ -6099,7 +6098,7 @@ static void bbio_error(struct btrfs_bio *bbio, struct bio *bio, u64 logical)
} }
} }
int btrfs_map_bio(struct btrfs_root *root, int rw, struct bio *bio, int btrfs_map_bio(struct btrfs_root *root, struct bio *bio,
int mirror_num, int async_submit) int mirror_num, int async_submit)
{ {
struct btrfs_device *dev; struct btrfs_device *dev;
@ -6166,7 +6165,7 @@ int btrfs_map_bio(struct btrfs_root *root, int rw, struct bio *bio,
bio = first_bio; bio = first_bio;
submit_stripe_bio(root, bbio, bio, submit_stripe_bio(root, bbio, bio,
bbio->stripes[dev_nr].physical, dev_nr, rw, bbio->stripes[dev_nr].physical, dev_nr,
async_submit); async_submit);
} }
btrfs_bio_counter_dec(root->fs_info); btrfs_bio_counter_dec(root->fs_info);

View File

@ -391,7 +391,7 @@ int btrfs_alloc_chunk(struct btrfs_trans_handle *trans,
struct btrfs_root *extent_root, u64 type); struct btrfs_root *extent_root, u64 type);
void btrfs_mapping_init(struct btrfs_mapping_tree *tree); void btrfs_mapping_init(struct btrfs_mapping_tree *tree);
void btrfs_mapping_tree_free(struct btrfs_mapping_tree *tree); void btrfs_mapping_tree_free(struct btrfs_mapping_tree *tree);
int btrfs_map_bio(struct btrfs_root *root, int rw, struct bio *bio, int btrfs_map_bio(struct btrfs_root *root, struct bio *bio,
int mirror_num, int async_submit); int mirror_num, int async_submit);
int btrfs_open_devices(struct btrfs_fs_devices *fs_devices, int btrfs_open_devices(struct btrfs_fs_devices *fs_devices,
fmode_t flags, void *holder); fmode_t flags, void *holder);