Commit cf8cddd3 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by David Sterba

btrfs: don't abuse REQ_OP_* flags for btrfs_map_block

btrfs_map_block supports different types of mappings, which to a large
extent resemble block layer operations.  But they don't always do, and
currently btrfs dangerously overlays it's own flag over the block layer
flags.  This is just asking for a conflict, so introduce a different
map flags enum inside of btrfs instead.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent e5517c2a
...@@ -1539,7 +1539,7 @@ static int btrfsic_map_block(struct btrfsic_state *state, u64 bytenr, u32 len, ...@@ -1539,7 +1539,7 @@ static int btrfsic_map_block(struct btrfsic_state *state, u64 bytenr, u32 len,
struct btrfs_device *device; struct btrfs_device *device;
length = len; length = len;
ret = btrfs_map_block(state->root->fs_info, READ, ret = btrfs_map_block(state->root->fs_info, BTRFS_MAP_READ,
bytenr, &length, &multi, mirror_num); bytenr, &length, &multi, mirror_num);
if (ret) { if (ret) {
......
...@@ -90,9 +90,6 @@ static const int btrfs_csum_sizes[] = { 4 }; ...@@ -90,9 +90,6 @@ static const int btrfs_csum_sizes[] = { 4 };
/* four bytes for CRC32 */ /* four bytes for CRC32 */
#define BTRFS_EMPTY_DIR_SIZE 0 #define BTRFS_EMPTY_DIR_SIZE 0
/* specific to btrfs_map_block(), therefore not in include/linux/blk_types.h */
#define REQ_GET_READ_MIRRORS (1 << 30)
/* ioprio of readahead is set to idle */ /* ioprio of readahead is set to idle */
#define BTRFS_IOPRIO_READA (IOPRIO_PRIO_VALUE(IOPRIO_CLASS_IDLE, 0)) #define BTRFS_IOPRIO_READA (IOPRIO_PRIO_VALUE(IOPRIO_CLASS_IDLE, 0))
......
...@@ -2036,7 +2036,7 @@ int btrfs_discard_extent(struct btrfs_root *root, u64 bytenr, ...@@ -2036,7 +2036,7 @@ int btrfs_discard_extent(struct btrfs_root *root, u64 bytenr,
*/ */
btrfs_bio_counter_inc_blocked(root->fs_info); btrfs_bio_counter_inc_blocked(root->fs_info);
/* Tell the block device(s) that the sectors can be discarded */ /* Tell the block device(s) that the sectors can be discarded */
ret = btrfs_map_block(root->fs_info, REQ_OP_DISCARD, ret = btrfs_map_block(root->fs_info, BTRFS_MAP_DISCARD,
bytenr, &num_bytes, &bbio, 0); bytenr, &num_bytes, &bbio, 0);
/* Error condition is -ENOMEM */ /* Error condition is -ENOMEM */
if (!ret) { if (!ret) {
......
...@@ -2029,7 +2029,7 @@ int repair_io_failure(struct inode *inode, u64 start, u64 length, u64 logical, ...@@ -2029,7 +2029,7 @@ int repair_io_failure(struct inode *inode, u64 start, u64 length, u64 logical,
* read repair operation. * read repair operation.
*/ */
btrfs_bio_counter_inc_blocked(fs_info); btrfs_bio_counter_inc_blocked(fs_info);
ret = btrfs_map_block(fs_info, WRITE, logical, ret = btrfs_map_block(fs_info, BTRFS_MAP_WRITE, logical,
&map_length, &bbio, mirror_num); &map_length, &bbio, mirror_num);
if (ret) { if (ret) {
btrfs_bio_counter_dec(fs_info); btrfs_bio_counter_dec(fs_info);
......
...@@ -1864,7 +1864,7 @@ int btrfs_merge_bio_hook(struct page *page, unsigned long offset, ...@@ -1864,7 +1864,7 @@ int btrfs_merge_bio_hook(struct page *page, unsigned long offset,
length = bio->bi_iter.bi_size; length = bio->bi_iter.bi_size;
map_length = length; map_length = length;
ret = btrfs_map_block(root->fs_info, bio_op(bio), logical, ret = btrfs_map_block(root->fs_info, btrfs_op(bio), logical,
&map_length, NULL, 0); &map_length, NULL, 0);
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -8406,7 +8406,7 @@ static int btrfs_submit_direct_hook(struct btrfs_dio_private *dip, ...@@ -8406,7 +8406,7 @@ static int btrfs_submit_direct_hook(struct btrfs_dio_private *dip,
int i; int i;
map_length = orig_bio->bi_iter.bi_size; map_length = orig_bio->bi_iter.bi_size;
ret = btrfs_map_block(root->fs_info, bio_op(orig_bio), ret = btrfs_map_block(root->fs_info, btrfs_op(orig_bio),
start_sector << 9, &map_length, NULL, 0); start_sector << 9, &map_length, NULL, 0);
if (ret) if (ret)
return -EIO; return -EIO;
...@@ -8472,7 +8472,7 @@ static int btrfs_submit_direct_hook(struct btrfs_dio_private *dip, ...@@ -8472,7 +8472,7 @@ static int btrfs_submit_direct_hook(struct btrfs_dio_private *dip,
btrfs_io_bio(bio)->logical = file_offset; btrfs_io_bio(bio)->logical = file_offset;
map_length = orig_bio->bi_iter.bi_size; map_length = orig_bio->bi_iter.bi_size;
ret = btrfs_map_block(root->fs_info, bio_op(orig_bio), ret = btrfs_map_block(root->fs_info, btrfs_op(orig_bio),
start_sector << 9, start_sector << 9,
&map_length, NULL, 0); &map_length, NULL, 0);
if (ret) { if (ret) {
......
...@@ -354,8 +354,8 @@ static struct reada_extent *reada_find_extent(struct btrfs_root *root, ...@@ -354,8 +354,8 @@ static struct reada_extent *reada_find_extent(struct btrfs_root *root,
* map block * map block
*/ */
length = blocksize; length = blocksize;
ret = btrfs_map_block(fs_info, REQ_GET_READ_MIRRORS, logical, &length, ret = btrfs_map_block(fs_info, BTRFS_MAP_GET_READ_MIRRORS, logical,
&bbio, 0); &length, &bbio, 0);
if (ret || !bbio || length < blocksize) if (ret || !bbio || length < blocksize)
goto error; goto error;
......
...@@ -1334,8 +1334,8 @@ static int scrub_setup_recheck_block(struct scrub_block *original_sblock, ...@@ -1334,8 +1334,8 @@ static int scrub_setup_recheck_block(struct scrub_block *original_sblock,
* with a length of PAGE_SIZE, each returned stripe * with a length of PAGE_SIZE, each returned stripe
* represents one mirror * represents one mirror
*/ */
ret = btrfs_map_sblock(fs_info, REQ_GET_READ_MIRRORS, logical, ret = btrfs_map_sblock(fs_info, BTRFS_MAP_GET_READ_MIRRORS,
&mapped_length, &bbio, 0, 1); logical, &mapped_length, &bbio, 0, 1);
if (ret || !bbio || mapped_length < sublen) { if (ret || !bbio || mapped_length < sublen) {
btrfs_put_bbio(bbio); btrfs_put_bbio(bbio);
return -EIO; return -EIO;
...@@ -2191,8 +2191,8 @@ static void scrub_missing_raid56_pages(struct scrub_block *sblock) ...@@ -2191,8 +2191,8 @@ static void scrub_missing_raid56_pages(struct scrub_block *sblock)
int ret; int ret;
int i; int i;
ret = btrfs_map_sblock(fs_info, REQ_GET_READ_MIRRORS, logical, &length, ret = btrfs_map_sblock(fs_info, BTRFS_MAP_GET_READ_MIRRORS, logical,
&bbio, 0, 1); &length, &bbio, 0, 1);
if (ret || !bbio || !bbio->raid_map) if (ret || !bbio || !bbio->raid_map)
goto bbio_out; goto bbio_out;
...@@ -2778,7 +2778,7 @@ static void scrub_parity_check_and_repair(struct scrub_parity *sparity) ...@@ -2778,7 +2778,7 @@ static void scrub_parity_check_and_repair(struct scrub_parity *sparity)
goto out; goto out;
length = sparity->logic_end - sparity->logic_start; length = sparity->logic_end - sparity->logic_start;
ret = btrfs_map_sblock(sctx->dev_root->fs_info, WRITE, ret = btrfs_map_sblock(sctx->dev_root->fs_info, BTRFS_MAP_WRITE,
sparity->logic_start, sparity->logic_start,
&length, &bbio, 0, 1); &length, &bbio, 0, 1);
if (ret || !bbio || !bbio->raid_map) if (ret || !bbio || !bbio->raid_map)
...@@ -2988,8 +2988,9 @@ static noinline_for_stack int scrub_raid56_parity(struct scrub_ctx *sctx, ...@@ -2988,8 +2988,9 @@ static noinline_for_stack int scrub_raid56_parity(struct scrub_ctx *sctx,
mapped_length = extent_len; mapped_length = extent_len;
bbio = NULL; bbio = NULL;
ret = btrfs_map_block(fs_info, READ, extent_logical, ret = btrfs_map_block(fs_info, BTRFS_MAP_READ,
&mapped_length, &bbio, 0); extent_logical, &mapped_length, &bbio,
0);
if (!ret) { if (!ret) {
if (!bbio || mapped_length < extent_len) if (!bbio || mapped_length < extent_len)
ret = -EIO; ret = -EIO;
...@@ -4076,7 +4077,7 @@ static void scrub_remap_extent(struct btrfs_fs_info *fs_info, ...@@ -4076,7 +4077,7 @@ static void scrub_remap_extent(struct btrfs_fs_info *fs_info,
int ret; int ret;
mapped_length = extent_len; mapped_length = extent_len;
ret = btrfs_map_block(fs_info, READ, extent_logical, ret = btrfs_map_block(fs_info, BTRFS_MAP_READ, extent_logical,
&mapped_length, &bbio, 0); &mapped_length, &bbio, 0);
if (ret || !bbio || mapped_length < extent_len || if (ret || !bbio || mapped_length < extent_len ||
!bbio->stripes[0].dev->bdev) { !bbio->stripes[0].dev->bdev) {
......
...@@ -5329,7 +5329,8 @@ void btrfs_put_bbio(struct btrfs_bio *bbio) ...@@ -5329,7 +5329,8 @@ void btrfs_put_bbio(struct btrfs_bio *bbio)
kfree(bbio); kfree(bbio);
} }
static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int op, static int __btrfs_map_block(struct btrfs_fs_info *fs_info,
enum btrfs_map_op op,
u64 logical, u64 *length, u64 logical, u64 *length,
struct btrfs_bio **bbio_ret, struct btrfs_bio **bbio_ret,
int mirror_num, int need_raid_map) int mirror_num, int need_raid_map)
...@@ -5414,7 +5415,7 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int op, ...@@ -5414,7 +5415,7 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int op,
raid56_full_stripe_start *= full_stripe_len; raid56_full_stripe_start *= full_stripe_len;
} }
if (op == REQ_OP_DISCARD) { if (op == BTRFS_MAP_DISCARD) {
/* we don't discard raid56 yet */ /* we don't discard raid56 yet */
if (map->type & BTRFS_BLOCK_GROUP_RAID56_MASK) { if (map->type & BTRFS_BLOCK_GROUP_RAID56_MASK) {
ret = -EOPNOTSUPP; ret = -EOPNOTSUPP;
...@@ -5427,7 +5428,7 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int op, ...@@ -5427,7 +5428,7 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int op,
For other RAID types and for RAID[56] reads, just allow a single For other RAID types and for RAID[56] reads, just allow a single
stripe (on a single disk). */ stripe (on a single disk). */
if ((map->type & BTRFS_BLOCK_GROUP_RAID56_MASK) && if ((map->type & BTRFS_BLOCK_GROUP_RAID56_MASK) &&
(op == REQ_OP_WRITE)) { (op == BTRFS_MAP_WRITE)) {
max_len = stripe_len * nr_data_stripes(map) - max_len = stripe_len * nr_data_stripes(map) -
(offset - raid56_full_stripe_start); (offset - raid56_full_stripe_start);
} else { } else {
...@@ -5452,8 +5453,8 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int op, ...@@ -5452,8 +5453,8 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int op,
btrfs_dev_replace_set_lock_blocking(dev_replace); btrfs_dev_replace_set_lock_blocking(dev_replace);
if (dev_replace_is_ongoing && mirror_num == map->num_stripes + 1 && if (dev_replace_is_ongoing && mirror_num == map->num_stripes + 1 &&
op != REQ_OP_WRITE && op != REQ_OP_DISCARD && op != BTRFS_MAP_WRITE && op != BTRFS_MAP_DISCARD &&
op != REQ_GET_READ_MIRRORS && dev_replace->tgtdev != NULL) { op != BTRFS_MAP_GET_READ_MIRRORS && dev_replace->tgtdev != NULL) {
/* /*
* in dev-replace case, for repair case (that's the only * in dev-replace case, for repair case (that's the only
* case where the mirror is selected explicitly when * case where the mirror is selected explicitly when
...@@ -5474,7 +5475,7 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int op, ...@@ -5474,7 +5475,7 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int op,
int found = 0; int found = 0;
u64 physical_of_found = 0; u64 physical_of_found = 0;
ret = __btrfs_map_block(fs_info, REQ_GET_READ_MIRRORS, ret = __btrfs_map_block(fs_info, BTRFS_MAP_GET_READ_MIRRORS,
logical, &tmp_length, &tmp_bbio, 0, 0); logical, &tmp_length, &tmp_bbio, 0, 0);
if (ret) { if (ret) {
WARN_ON(tmp_bbio != NULL); WARN_ON(tmp_bbio != NULL);
...@@ -5484,7 +5485,7 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int op, ...@@ -5484,7 +5485,7 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int op,
tmp_num_stripes = tmp_bbio->num_stripes; tmp_num_stripes = tmp_bbio->num_stripes;
if (mirror_num > tmp_num_stripes) { if (mirror_num > tmp_num_stripes) {
/* /*
* REQ_GET_READ_MIRRORS does not contain this * BTRFS_MAP_GET_READ_MIRRORS does not contain this
* mirror, that means that the requested area * mirror, that means that the requested area
* is not left of the left cursor * is not left of the left cursor
*/ */
...@@ -5540,17 +5541,17 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int op, ...@@ -5540,17 +5541,17 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int op,
(offset + *length); (offset + *length);
if (map->type & BTRFS_BLOCK_GROUP_RAID0) { if (map->type & BTRFS_BLOCK_GROUP_RAID0) {
if (op == REQ_OP_DISCARD) if (op == BTRFS_MAP_DISCARD)
num_stripes = min_t(u64, map->num_stripes, num_stripes = min_t(u64, map->num_stripes,
stripe_nr_end - stripe_nr_orig); stripe_nr_end - stripe_nr_orig);
stripe_nr = div_u64_rem(stripe_nr, map->num_stripes, stripe_nr = div_u64_rem(stripe_nr, map->num_stripes,
&stripe_index); &stripe_index);
if (op != REQ_OP_WRITE && op != REQ_OP_DISCARD && if (op != BTRFS_MAP_WRITE && op != BTRFS_MAP_DISCARD &&
op != REQ_GET_READ_MIRRORS) op != BTRFS_MAP_GET_READ_MIRRORS)
mirror_num = 1; mirror_num = 1;
} else if (map->type & BTRFS_BLOCK_GROUP_RAID1) { } else if (map->type & BTRFS_BLOCK_GROUP_RAID1) {
if (op == REQ_OP_WRITE || op == REQ_OP_DISCARD || if (op == BTRFS_MAP_WRITE || op == BTRFS_MAP_DISCARD ||
op == REQ_GET_READ_MIRRORS) op == BTRFS_MAP_GET_READ_MIRRORS)
num_stripes = map->num_stripes; num_stripes = map->num_stripes;
else if (mirror_num) else if (mirror_num)
stripe_index = mirror_num - 1; stripe_index = mirror_num - 1;
...@@ -5563,8 +5564,8 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int op, ...@@ -5563,8 +5564,8 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int op,
} }
} else if (map->type & BTRFS_BLOCK_GROUP_DUP) { } else if (map->type & BTRFS_BLOCK_GROUP_DUP) {
if (op == REQ_OP_WRITE || op == REQ_OP_DISCARD || if (op == BTRFS_MAP_WRITE || op == BTRFS_MAP_DISCARD ||
op == REQ_GET_READ_MIRRORS) { op == BTRFS_MAP_GET_READ_MIRRORS) {
num_stripes = map->num_stripes; num_stripes = map->num_stripes;
} else if (mirror_num) { } else if (mirror_num) {
stripe_index = mirror_num - 1; stripe_index = mirror_num - 1;
...@@ -5578,9 +5579,9 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int op, ...@@ -5578,9 +5579,9 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int op,
stripe_nr = div_u64_rem(stripe_nr, factor, &stripe_index); stripe_nr = div_u64_rem(stripe_nr, factor, &stripe_index);
stripe_index *= map->sub_stripes; stripe_index *= map->sub_stripes;
if (op == REQ_OP_WRITE || op == REQ_GET_READ_MIRRORS) if (op == BTRFS_MAP_WRITE || op == BTRFS_MAP_GET_READ_MIRRORS)
num_stripes = map->sub_stripes; num_stripes = map->sub_stripes;
else if (op == REQ_OP_DISCARD) else if (op == BTRFS_MAP_DISCARD)
num_stripes = min_t(u64, map->sub_stripes * num_stripes = min_t(u64, map->sub_stripes *
(stripe_nr_end - stripe_nr_orig), (stripe_nr_end - stripe_nr_orig),
map->num_stripes); map->num_stripes);
...@@ -5598,7 +5599,7 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int op, ...@@ -5598,7 +5599,7 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int op,
} else if (map->type & BTRFS_BLOCK_GROUP_RAID56_MASK) { } else if (map->type & BTRFS_BLOCK_GROUP_RAID56_MASK) {
if (need_raid_map && if (need_raid_map &&
(op == REQ_OP_WRITE || op == REQ_GET_READ_MIRRORS || (op == BTRFS_MAP_WRITE || op == BTRFS_MAP_GET_READ_MIRRORS ||
mirror_num > 1)) { mirror_num > 1)) {
/* push stripe_nr back to the start of the full stripe */ /* push stripe_nr back to the start of the full stripe */
stripe_nr = div_u64(raid56_full_stripe_start, stripe_nr = div_u64(raid56_full_stripe_start,
...@@ -5626,8 +5627,8 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int op, ...@@ -5626,8 +5627,8 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int op,
/* We distribute the parity blocks across stripes */ /* We distribute the parity blocks across stripes */
div_u64_rem(stripe_nr + stripe_index, map->num_stripes, div_u64_rem(stripe_nr + stripe_index, map->num_stripes,
&stripe_index); &stripe_index);
if ((op != REQ_OP_WRITE && op != REQ_OP_DISCARD && if ((op != BTRFS_MAP_WRITE && op != BTRFS_MAP_DISCARD &&
op != REQ_GET_READ_MIRRORS) && mirror_num <= 1) op != BTRFS_MAP_GET_READ_MIRRORS) && mirror_num <= 1)
mirror_num = 1; mirror_num = 1;
} }
} else { } else {
...@@ -5650,9 +5651,9 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int op, ...@@ -5650,9 +5651,9 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int op,
num_alloc_stripes = num_stripes; num_alloc_stripes = num_stripes;
if (dev_replace_is_ongoing) { if (dev_replace_is_ongoing) {
if (op == REQ_OP_WRITE || op == REQ_OP_DISCARD) if (op == BTRFS_MAP_WRITE || op == BTRFS_MAP_DISCARD)
num_alloc_stripes <<= 1; num_alloc_stripes <<= 1;
if (op == REQ_GET_READ_MIRRORS) if (op == BTRFS_MAP_GET_READ_MIRRORS)
num_alloc_stripes++; num_alloc_stripes++;
tgtdev_indexes = num_stripes; tgtdev_indexes = num_stripes;
} }
...@@ -5668,7 +5669,7 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int op, ...@@ -5668,7 +5669,7 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int op,
/* build raid_map */ /* build raid_map */
if (map->type & BTRFS_BLOCK_GROUP_RAID56_MASK && if (map->type & BTRFS_BLOCK_GROUP_RAID56_MASK &&
need_raid_map && need_raid_map &&
((op == REQ_OP_WRITE || op == REQ_GET_READ_MIRRORS) || ((op == BTRFS_MAP_WRITE || op == BTRFS_MAP_GET_READ_MIRRORS) ||
mirror_num > 1)) { mirror_num > 1)) {
u64 tmp; u64 tmp;
unsigned rot; unsigned rot;
...@@ -5693,7 +5694,7 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int op, ...@@ -5693,7 +5694,7 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int op,
RAID6_Q_STRIPE; RAID6_Q_STRIPE;
} }
if (op == REQ_OP_DISCARD) { if (op == BTRFS_MAP_DISCARD) {
u32 factor = 0; u32 factor = 0;
u32 sub_stripes = 0; u32 sub_stripes = 0;
u64 stripes_per_dev = 0; u64 stripes_per_dev = 0;
...@@ -5773,7 +5774,7 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int op, ...@@ -5773,7 +5774,7 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int op,
} }
} }
if (op == REQ_OP_WRITE || op == REQ_GET_READ_MIRRORS) if (op == BTRFS_MAP_WRITE || op == BTRFS_MAP_GET_READ_MIRRORS)
max_errors = btrfs_chunk_max_errors(map); max_errors = btrfs_chunk_max_errors(map);
if (bbio->raid_map) if (bbio->raid_map)
...@@ -5781,7 +5782,7 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int op, ...@@ -5781,7 +5782,7 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int op,
tgtdev_indexes = 0; tgtdev_indexes = 0;
if (dev_replace_is_ongoing && if (dev_replace_is_ongoing &&
(op == REQ_OP_WRITE || op == REQ_OP_DISCARD) && (op == BTRFS_MAP_WRITE || op == BTRFS_MAP_DISCARD) &&
dev_replace->tgtdev != NULL) { dev_replace->tgtdev != NULL) {
int index_where_to_add; int index_where_to_add;
u64 srcdev_devid = dev_replace->srcdev->devid; u64 srcdev_devid = dev_replace->srcdev->devid;
...@@ -5816,7 +5817,8 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int op, ...@@ -5816,7 +5817,8 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int op,
} }
} }
num_stripes = index_where_to_add; num_stripes = index_where_to_add;
} else if (dev_replace_is_ongoing && (op == REQ_GET_READ_MIRRORS) && } else if (dev_replace_is_ongoing &&
op == BTRFS_MAP_GET_READ_MIRRORS &&
dev_replace->tgtdev != NULL) { dev_replace->tgtdev != NULL) {
u64 srcdev_devid = dev_replace->srcdev->devid; u64 srcdev_devid = dev_replace->srcdev->devid;
int index_srcdev = 0; int index_srcdev = 0;
...@@ -5888,7 +5890,7 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int op, ...@@ -5888,7 +5890,7 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int op,
return ret; return ret;
} }
int btrfs_map_block(struct btrfs_fs_info *fs_info, int op, int btrfs_map_block(struct btrfs_fs_info *fs_info, enum btrfs_map_op op,
u64 logical, u64 *length, u64 logical, u64 *length,
struct btrfs_bio **bbio_ret, int mirror_num) struct btrfs_bio **bbio_ret, int mirror_num)
{ {
...@@ -5897,7 +5899,7 @@ int btrfs_map_block(struct btrfs_fs_info *fs_info, int op, ...@@ -5897,7 +5899,7 @@ int btrfs_map_block(struct btrfs_fs_info *fs_info, int op,
} }
/* For Scrub/replace */ /* For Scrub/replace */
int btrfs_map_sblock(struct btrfs_fs_info *fs_info, int op, int btrfs_map_sblock(struct btrfs_fs_info *fs_info, enum btrfs_map_op op,
u64 logical, u64 *length, u64 logical, u64 *length,
struct btrfs_bio **bbio_ret, int mirror_num, struct btrfs_bio **bbio_ret, int mirror_num,
int need_raid_map) int need_raid_map)
......
...@@ -371,14 +371,35 @@ struct btrfs_balance_control { ...@@ -371,14 +371,35 @@ struct btrfs_balance_control {
struct btrfs_balance_progress stat; struct btrfs_balance_progress stat;
}; };
enum btrfs_map_op {
BTRFS_MAP_READ,
BTRFS_MAP_WRITE,
BTRFS_MAP_DISCARD,
BTRFS_MAP_GET_READ_MIRRORS,
};
static inline enum btrfs_map_op btrfs_op(struct bio *bio)
{
switch (bio_op(bio)) {
case REQ_OP_DISCARD:
return BTRFS_MAP_DISCARD;
case REQ_OP_WRITE:
return BTRFS_MAP_WRITE;
default:
WARN_ON_ONCE(1);
case REQ_OP_READ:
return BTRFS_MAP_READ;
}
}
int btrfs_account_dev_extents_size(struct btrfs_device *device, u64 start, int btrfs_account_dev_extents_size(struct btrfs_device *device, u64 start,
u64 end, u64 *length); u64 end, u64 *length);
void btrfs_get_bbio(struct btrfs_bio *bbio); void btrfs_get_bbio(struct btrfs_bio *bbio);
void btrfs_put_bbio(struct btrfs_bio *bbio); void btrfs_put_bbio(struct btrfs_bio *bbio);
int btrfs_map_block(struct btrfs_fs_info *fs_info, int op, int btrfs_map_block(struct btrfs_fs_info *fs_info, enum btrfs_map_op op,
u64 logical, u64 *length, u64 logical, u64 *length,
struct btrfs_bio **bbio_ret, int mirror_num); struct btrfs_bio **bbio_ret, int mirror_num);
int btrfs_map_sblock(struct btrfs_fs_info *fs_info, int op, int btrfs_map_sblock(struct btrfs_fs_info *fs_info, enum btrfs_map_op op,
u64 logical, u64 *length, u64 logical, u64 *length,
struct btrfs_bio **bbio_ret, int mirror_num, struct btrfs_bio **bbio_ret, int mirror_num,
int need_raid_map); int need_raid_map);
......
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