mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 10:41:38 -04:00
Merge branch 'for-4.14/block' of git://git.kernel.dk/linux-block
Pull block layer updates from Jens Axboe:
"This is the first pull request for 4.14, containing most of the code
changes. It's a quiet series this round, which I think we needed after
the churn of the last few series. This contains:
- Fix for a registration race in loop, from Anton Volkov.
- Overflow complaint fix from Arnd for DAC960.
- Series of drbd changes from the usual suspects.
- Conversion of the stec/skd driver to blk-mq. From Bart.
- A few BFQ improvements/fixes from Paolo.
- CFQ improvement from Ritesh, allowing idling for group idle.
- A few fixes found by Dan's smatch, courtesy of Dan.
- A warning fixup for a race between changing the IO scheduler and
device remova. From David Jeffery.
- A few nbd fixes from Josef.
- Support for cgroup info in blktrace, from Shaohua.
- Also from Shaohua, new features in the null_blk driver to allow it
to actually hold data, among other things.
- Various corner cases and error handling fixes from Weiping Zhang.
- Improvements to the IO stats tracking for blk-mq from me. Can
drastically improve performance for fast devices and/or big
machines.
- Series from Christoph removing bi_bdev as being needed for IO
submission, in preparation for nvme multipathing code.
- Series from Bart, including various cleanups and fixes for switch
fall through case complaints"
* 'for-4.14/block' of git://git.kernel.dk/linux-block: (162 commits)
kernfs: checking for IS_ERR() instead of NULL
drbd: remove BIOSET_NEED_RESCUER flag from drbd_{md_,}io_bio_set
drbd: Fix allyesconfig build, fix recent commit
drbd: switch from kmalloc() to kmalloc_array()
drbd: abort drbd_start_resync if there is no connection
drbd: move global variables to drbd namespace and make some static
drbd: rename "usermode_helper" to "drbd_usermode_helper"
drbd: fix race between handshake and admin disconnect/down
drbd: fix potential deadlock when trying to detach during handshake
drbd: A single dot should be put into a sequence.
drbd: fix rmmod cleanup, remove _all_ debugfs entries
drbd: Use setup_timer() instead of init_timer() to simplify the code.
drbd: fix potential get_ldev/put_ldev refcount imbalance during attach
drbd: new disk-option disable-write-same
drbd: Fix resource role for newly created resources in events2
drbd: mark symbols static where possible
drbd: Send P_NEG_ACK upon write error in protocol != C
drbd: add explicit plugging when submitting batches
drbd: change list_for_each_safe to while(list_first_entry_or_null)
drbd: introduce drbd_recv_header_maybe_unplug
...
This commit is contained in:
commit
a0725ab0c7
160 changed files with 3684 additions and 3486 deletions
|
|
@ -49,7 +49,7 @@ void bch_btree_verify(struct btree *b)
|
|||
v->keys.ops = b->keys.ops;
|
||||
|
||||
bio = bch_bbio_alloc(b->c);
|
||||
bio->bi_bdev = PTR_CACHE(b->c, &b->key, 0)->bdev;
|
||||
bio_set_dev(bio, PTR_CACHE(b->c, &b->key, 0)->bdev);
|
||||
bio->bi_iter.bi_sector = PTR_OFFSET(&b->key, 0);
|
||||
bio->bi_iter.bi_size = KEY_SIZE(&v->key) << 9;
|
||||
bio->bi_opf = REQ_OP_READ | REQ_META;
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ void __bch_submit_bbio(struct bio *bio, struct cache_set *c)
|
|||
struct bbio *b = container_of(bio, struct bbio, bio);
|
||||
|
||||
bio->bi_iter.bi_sector = PTR_OFFSET(&b->key, 0);
|
||||
bio->bi_bdev = PTR_CACHE(c, &b->key, 0)->bdev;
|
||||
bio_set_dev(bio, PTR_CACHE(c, &b->key, 0)->bdev);
|
||||
|
||||
b->submit_time_us = local_clock_us();
|
||||
closure_bio_submit(bio, bio->bi_private);
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ reread: left = ca->sb.bucket_size - offset;
|
|||
|
||||
bio_reset(bio);
|
||||
bio->bi_iter.bi_sector = bucket + offset;
|
||||
bio->bi_bdev = ca->bdev;
|
||||
bio_set_dev(bio, ca->bdev);
|
||||
bio->bi_iter.bi_size = len << 9;
|
||||
|
||||
bio->bi_end_io = journal_read_endio;
|
||||
|
|
@ -452,7 +452,7 @@ static void do_journal_discard(struct cache *ca)
|
|||
bio_set_op_attrs(bio, REQ_OP_DISCARD, 0);
|
||||
bio->bi_iter.bi_sector = bucket_to_sector(ca->set,
|
||||
ca->sb.d[ja->discard_idx]);
|
||||
bio->bi_bdev = ca->bdev;
|
||||
bio_set_dev(bio, ca->bdev);
|
||||
bio->bi_iter.bi_size = bucket_bytes(ca);
|
||||
bio->bi_end_io = journal_discard_endio;
|
||||
|
||||
|
|
@ -623,7 +623,7 @@ static void journal_write_unlocked(struct closure *cl)
|
|||
|
||||
bio_reset(bio);
|
||||
bio->bi_iter.bi_sector = PTR_OFFSET(k, i);
|
||||
bio->bi_bdev = ca->bdev;
|
||||
bio_set_dev(bio, ca->bdev);
|
||||
bio->bi_iter.bi_size = sectors << 9;
|
||||
|
||||
bio->bi_end_io = journal_write_endio;
|
||||
|
|
|
|||
|
|
@ -607,7 +607,8 @@ static void request_endio(struct bio *bio)
|
|||
static void bio_complete(struct search *s)
|
||||
{
|
||||
if (s->orig_bio) {
|
||||
generic_end_io_acct(bio_data_dir(s->orig_bio),
|
||||
struct request_queue *q = s->orig_bio->bi_disk->queue;
|
||||
generic_end_io_acct(q, bio_data_dir(s->orig_bio),
|
||||
&s->d->disk->part0, s->start_time);
|
||||
|
||||
trace_bcache_request_end(s->d, s->orig_bio);
|
||||
|
|
@ -734,7 +735,7 @@ static void cached_dev_read_done(struct closure *cl)
|
|||
if (s->iop.bio) {
|
||||
bio_reset(s->iop.bio);
|
||||
s->iop.bio->bi_iter.bi_sector = s->cache_miss->bi_iter.bi_sector;
|
||||
s->iop.bio->bi_bdev = s->cache_miss->bi_bdev;
|
||||
bio_copy_dev(s->iop.bio, s->cache_miss);
|
||||
s->iop.bio->bi_iter.bi_size = s->insert_bio_sectors << 9;
|
||||
bch_bio_map(s->iop.bio, NULL);
|
||||
|
||||
|
|
@ -793,7 +794,7 @@ static int cached_dev_cache_miss(struct btree *b, struct search *s,
|
|||
!(bio->bi_opf & REQ_META) &&
|
||||
s->iop.c->gc_stats.in_use < CUTOFF_CACHE_READA)
|
||||
reada = min_t(sector_t, dc->readahead >> 9,
|
||||
bdev_sectors(bio->bi_bdev) - bio_end_sector(bio));
|
||||
get_capacity(bio->bi_disk) - bio_end_sector(bio));
|
||||
|
||||
s->insert_bio_sectors = min(sectors, bio_sectors(bio) + reada);
|
||||
|
||||
|
|
@ -819,7 +820,7 @@ static int cached_dev_cache_miss(struct btree *b, struct search *s,
|
|||
goto out_submit;
|
||||
|
||||
cache_bio->bi_iter.bi_sector = miss->bi_iter.bi_sector;
|
||||
cache_bio->bi_bdev = miss->bi_bdev;
|
||||
bio_copy_dev(cache_bio, miss);
|
||||
cache_bio->bi_iter.bi_size = s->insert_bio_sectors << 9;
|
||||
|
||||
cache_bio->bi_end_io = request_endio;
|
||||
|
|
@ -918,7 +919,7 @@ static void cached_dev_write(struct cached_dev *dc, struct search *s)
|
|||
struct bio *flush = bio_alloc_bioset(GFP_NOIO, 0,
|
||||
dc->disk.bio_split);
|
||||
|
||||
flush->bi_bdev = bio->bi_bdev;
|
||||
bio_copy_dev(flush, bio);
|
||||
flush->bi_end_io = request_endio;
|
||||
flush->bi_private = cl;
|
||||
flush->bi_opf = REQ_OP_WRITE | REQ_PREFLUSH;
|
||||
|
|
@ -955,13 +956,13 @@ static blk_qc_t cached_dev_make_request(struct request_queue *q,
|
|||
struct bio *bio)
|
||||
{
|
||||
struct search *s;
|
||||
struct bcache_device *d = bio->bi_bdev->bd_disk->private_data;
|
||||
struct bcache_device *d = bio->bi_disk->private_data;
|
||||
struct cached_dev *dc = container_of(d, struct cached_dev, disk);
|
||||
int rw = bio_data_dir(bio);
|
||||
|
||||
generic_start_io_acct(rw, bio_sectors(bio), &d->disk->part0);
|
||||
generic_start_io_acct(q, rw, bio_sectors(bio), &d->disk->part0);
|
||||
|
||||
bio->bi_bdev = dc->bdev;
|
||||
bio_set_dev(bio, dc->bdev);
|
||||
bio->bi_iter.bi_sector += dc->sb.data_offset;
|
||||
|
||||
if (cached_dev_get(dc)) {
|
||||
|
|
@ -1071,10 +1072,10 @@ static blk_qc_t flash_dev_make_request(struct request_queue *q,
|
|||
{
|
||||
struct search *s;
|
||||
struct closure *cl;
|
||||
struct bcache_device *d = bio->bi_bdev->bd_disk->private_data;
|
||||
struct bcache_device *d = bio->bi_disk->private_data;
|
||||
int rw = bio_data_dir(bio);
|
||||
|
||||
generic_start_io_acct(rw, bio_sectors(bio), &d->disk->part0);
|
||||
generic_start_io_acct(q, rw, bio_sectors(bio), &d->disk->part0);
|
||||
|
||||
s = search_alloc(bio, d);
|
||||
cl = &s->cl;
|
||||
|
|
|
|||
|
|
@ -257,7 +257,7 @@ void bch_write_bdev_super(struct cached_dev *dc, struct closure *parent)
|
|||
closure_init(cl, parent);
|
||||
|
||||
bio_reset(bio);
|
||||
bio->bi_bdev = dc->bdev;
|
||||
bio_set_dev(bio, dc->bdev);
|
||||
bio->bi_end_io = write_bdev_super_endio;
|
||||
bio->bi_private = dc;
|
||||
|
||||
|
|
@ -303,7 +303,7 @@ void bcache_write_super(struct cache_set *c)
|
|||
SET_CACHE_SYNC(&ca->sb, CACHE_SYNC(&c->sb));
|
||||
|
||||
bio_reset(bio);
|
||||
bio->bi_bdev = ca->bdev;
|
||||
bio_set_dev(bio, ca->bdev);
|
||||
bio->bi_end_io = write_super_endio;
|
||||
bio->bi_private = ca;
|
||||
|
||||
|
|
@ -508,7 +508,7 @@ static void prio_io(struct cache *ca, uint64_t bucket, int op,
|
|||
closure_init_stack(cl);
|
||||
|
||||
bio->bi_iter.bi_sector = bucket * ca->sb.bucket_size;
|
||||
bio->bi_bdev = ca->bdev;
|
||||
bio_set_dev(bio, ca->bdev);
|
||||
bio->bi_iter.bi_size = bucket_bytes(ca);
|
||||
|
||||
bio->bi_end_io = prio_endio;
|
||||
|
|
|
|||
|
|
@ -181,7 +181,7 @@ static void write_dirty(struct closure *cl)
|
|||
dirty_init(w);
|
||||
bio_set_op_attrs(&io->bio, REQ_OP_WRITE, 0);
|
||||
io->bio.bi_iter.bi_sector = KEY_START(&w->key);
|
||||
io->bio.bi_bdev = io->dc->bdev;
|
||||
bio_set_dev(&io->bio, io->dc->bdev);
|
||||
io->bio.bi_end_io = dirty_endio;
|
||||
|
||||
closure_bio_submit(&io->bio, cl);
|
||||
|
|
@ -250,8 +250,7 @@ static void read_dirty(struct cached_dev *dc)
|
|||
dirty_init(w);
|
||||
bio_set_op_attrs(&io->bio, REQ_OP_READ, 0);
|
||||
io->bio.bi_iter.bi_sector = PTR_OFFSET(&w->key, 0);
|
||||
io->bio.bi_bdev = PTR_CACHE(dc->disk.c,
|
||||
&w->key, 0)->bdev;
|
||||
bio_set_dev(&io->bio, PTR_CACHE(dc->disk.c, &w->key, 0)->bdev);
|
||||
io->bio.bi_end_io = read_dirty_endio;
|
||||
|
||||
if (bio_alloc_pages(&io->bio, GFP_KERNEL))
|
||||
|
|
|
|||
|
|
@ -18,21 +18,24 @@
|
|||
*/
|
||||
|
||||
struct dm_bio_details {
|
||||
struct block_device *bi_bdev;
|
||||
struct gendisk *bi_disk;
|
||||
u8 bi_partno;
|
||||
unsigned long bi_flags;
|
||||
struct bvec_iter bi_iter;
|
||||
};
|
||||
|
||||
static inline void dm_bio_record(struct dm_bio_details *bd, struct bio *bio)
|
||||
{
|
||||
bd->bi_bdev = bio->bi_bdev;
|
||||
bd->bi_disk = bio->bi_disk;
|
||||
bd->bi_partno = bio->bi_partno;
|
||||
bd->bi_flags = bio->bi_flags;
|
||||
bd->bi_iter = bio->bi_iter;
|
||||
}
|
||||
|
||||
static inline void dm_bio_restore(struct dm_bio_details *bd, struct bio *bio)
|
||||
{
|
||||
bio->bi_bdev = bd->bi_bdev;
|
||||
bio->bi_disk = bd->bi_disk;
|
||||
bio->bi_partno = bd->bi_partno;
|
||||
bio->bi_flags = bd->bi_flags;
|
||||
bio->bi_iter = bd->bi_iter;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -616,7 +616,7 @@ static void use_inline_bio(struct dm_buffer *b, int rw, sector_t sector,
|
|||
|
||||
bio_init(&b->bio, b->bio_vec, DM_BUFIO_INLINE_VECS);
|
||||
b->bio.bi_iter.bi_sector = sector;
|
||||
b->bio.bi_bdev = b->c->bdev;
|
||||
bio_set_dev(&b->bio, b->c->bdev);
|
||||
b->bio.bi_end_io = inline_endio;
|
||||
/*
|
||||
* Use of .bi_private isn't a problem here because
|
||||
|
|
|
|||
|
|
@ -833,7 +833,7 @@ static bool is_discarded_oblock(struct cache *cache, dm_oblock_t b)
|
|||
*--------------------------------------------------------------*/
|
||||
static void remap_to_origin(struct cache *cache, struct bio *bio)
|
||||
{
|
||||
bio->bi_bdev = cache->origin_dev->bdev;
|
||||
bio_set_dev(bio, cache->origin_dev->bdev);
|
||||
}
|
||||
|
||||
static void remap_to_cache(struct cache *cache, struct bio *bio,
|
||||
|
|
@ -842,7 +842,7 @@ static void remap_to_cache(struct cache *cache, struct bio *bio,
|
|||
sector_t bi_sector = bio->bi_iter.bi_sector;
|
||||
sector_t block = from_cblock(cblock);
|
||||
|
||||
bio->bi_bdev = cache->cache_dev->bdev;
|
||||
bio_set_dev(bio, cache->cache_dev->bdev);
|
||||
if (!block_size_is_power_of_two(cache))
|
||||
bio->bi_iter.bi_sector =
|
||||
(block * cache->sectors_per_block) +
|
||||
|
|
|
|||
|
|
@ -932,9 +932,6 @@ static int dm_crypt_integrity_io_alloc(struct dm_crypt_io *io, struct bio *bio)
|
|||
bip->bip_iter.bi_size = tag_len;
|
||||
bip->bip_iter.bi_sector = io->cc->start + io->sector;
|
||||
|
||||
/* We own the metadata, do not let bio_free to release it */
|
||||
bip->bip_flags &= ~BIP_BLOCK_INTEGRITY;
|
||||
|
||||
ret = bio_integrity_add_page(bio, virt_to_page(io->integrity_metadata),
|
||||
tag_len, offset_in_page(io->integrity_metadata));
|
||||
if (unlikely(ret != tag_len))
|
||||
|
|
@ -1546,7 +1543,7 @@ static void clone_init(struct dm_crypt_io *io, struct bio *clone)
|
|||
|
||||
clone->bi_private = io;
|
||||
clone->bi_end_io = crypt_endio;
|
||||
clone->bi_bdev = cc->dev->bdev;
|
||||
bio_set_dev(clone, cc->dev->bdev);
|
||||
clone->bi_opf = io->base_bio->bi_opf;
|
||||
}
|
||||
|
||||
|
|
@ -2795,7 +2792,7 @@ static int crypt_map(struct dm_target *ti, struct bio *bio)
|
|||
*/
|
||||
if (unlikely(bio->bi_opf & REQ_PREFLUSH ||
|
||||
bio_op(bio) == REQ_OP_DISCARD)) {
|
||||
bio->bi_bdev = cc->dev->bdev;
|
||||
bio_set_dev(bio, cc->dev->bdev);
|
||||
if (bio_sectors(bio))
|
||||
bio->bi_iter.bi_sector = cc->start +
|
||||
dm_target_offset(ti, bio->bi_iter.bi_sector);
|
||||
|
|
|
|||
|
|
@ -282,7 +282,7 @@ static int delay_map(struct dm_target *ti, struct bio *bio)
|
|||
struct delay_c *dc = ti->private;
|
||||
|
||||
if ((bio_data_dir(bio) == WRITE) && (dc->dev_write)) {
|
||||
bio->bi_bdev = dc->dev_write->bdev;
|
||||
bio_set_dev(bio, dc->dev_write->bdev);
|
||||
if (bio_sectors(bio))
|
||||
bio->bi_iter.bi_sector = dc->start_write +
|
||||
dm_target_offset(ti, bio->bi_iter.bi_sector);
|
||||
|
|
@ -290,7 +290,7 @@ static int delay_map(struct dm_target *ti, struct bio *bio)
|
|||
return delay_bio(dc, dc->write_delay, bio);
|
||||
}
|
||||
|
||||
bio->bi_bdev = dc->dev_read->bdev;
|
||||
bio_set_dev(bio, dc->dev_read->bdev);
|
||||
bio->bi_iter.bi_sector = dc->start_read +
|
||||
dm_target_offset(ti, bio->bi_iter.bi_sector);
|
||||
|
||||
|
|
|
|||
|
|
@ -1192,7 +1192,7 @@ static dm_block_t get_block(struct era *era, struct bio *bio)
|
|||
|
||||
static void remap_to_origin(struct era *era, struct bio *bio)
|
||||
{
|
||||
bio->bi_bdev = era->origin_dev->bdev;
|
||||
bio_set_dev(bio, era->origin_dev->bdev);
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -274,7 +274,7 @@ static void flakey_map_bio(struct dm_target *ti, struct bio *bio)
|
|||
{
|
||||
struct flakey_c *fc = ti->private;
|
||||
|
||||
bio->bi_bdev = fc->dev->bdev;
|
||||
bio_set_dev(bio, fc->dev->bdev);
|
||||
if (bio_sectors(bio) || bio_op(bio) == REQ_OP_ZONE_RESET)
|
||||
bio->bi_iter.bi_sector =
|
||||
flakey_map_sector(ti, bio->bi_iter.bi_sector);
|
||||
|
|
|
|||
|
|
@ -250,7 +250,8 @@ struct dm_integrity_io {
|
|||
|
||||
struct completion *completion;
|
||||
|
||||
struct block_device *orig_bi_bdev;
|
||||
struct gendisk *orig_bi_disk;
|
||||
u8 orig_bi_partno;
|
||||
bio_end_io_t *orig_bi_end_io;
|
||||
struct bio_integrity_payload *orig_bi_integrity;
|
||||
struct bvec_iter orig_bi_iter;
|
||||
|
|
@ -1164,7 +1165,8 @@ static void integrity_end_io(struct bio *bio)
|
|||
struct dm_integrity_io *dio = dm_per_bio_data(bio, sizeof(struct dm_integrity_io));
|
||||
|
||||
bio->bi_iter = dio->orig_bi_iter;
|
||||
bio->bi_bdev = dio->orig_bi_bdev;
|
||||
bio->bi_disk = dio->orig_bi_disk;
|
||||
bio->bi_partno = dio->orig_bi_partno;
|
||||
if (dio->orig_bi_integrity) {
|
||||
bio->bi_integrity = dio->orig_bi_integrity;
|
||||
bio->bi_opf |= REQ_INTEGRITY;
|
||||
|
|
@ -1681,8 +1683,9 @@ sleep:
|
|||
|
||||
dio->orig_bi_iter = bio->bi_iter;
|
||||
|
||||
dio->orig_bi_bdev = bio->bi_bdev;
|
||||
bio->bi_bdev = ic->dev->bdev;
|
||||
dio->orig_bi_disk = bio->bi_disk;
|
||||
dio->orig_bi_partno = bio->bi_partno;
|
||||
bio_set_dev(bio, ic->dev->bdev);
|
||||
|
||||
dio->orig_bi_integrity = bio_integrity(bio);
|
||||
bio->bi_integrity = NULL;
|
||||
|
|
|
|||
|
|
@ -347,7 +347,7 @@ static void do_region(int op, int op_flags, unsigned region,
|
|||
|
||||
bio = bio_alloc_bioset(GFP_NOIO, num_bvecs, io->client->bios);
|
||||
bio->bi_iter.bi_sector = where->sector + (where->count - remaining);
|
||||
bio->bi_bdev = where->bdev;
|
||||
bio_set_dev(bio, where->bdev);
|
||||
bio->bi_end_io = endio;
|
||||
bio_set_op_attrs(bio, op, op_flags);
|
||||
store_io_and_region_in_bio(bio, io, region);
|
||||
|
|
|
|||
|
|
@ -88,7 +88,7 @@ static void linear_map_bio(struct dm_target *ti, struct bio *bio)
|
|||
{
|
||||
struct linear_c *lc = ti->private;
|
||||
|
||||
bio->bi_bdev = lc->dev->bdev;
|
||||
bio_set_dev(bio, lc->dev->bdev);
|
||||
if (bio_sectors(bio) || bio_op(bio) == REQ_OP_ZONE_RESET)
|
||||
bio->bi_iter.bi_sector =
|
||||
linear_map_sector(ti, bio->bi_iter.bi_sector);
|
||||
|
|
|
|||
|
|
@ -198,7 +198,7 @@ static int write_metadata(struct log_writes_c *lc, void *entry,
|
|||
}
|
||||
bio->bi_iter.bi_size = 0;
|
||||
bio->bi_iter.bi_sector = sector;
|
||||
bio->bi_bdev = lc->logdev->bdev;
|
||||
bio_set_dev(bio, lc->logdev->bdev);
|
||||
bio->bi_end_io = log_end_io;
|
||||
bio->bi_private = lc;
|
||||
bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
|
||||
|
|
@ -263,7 +263,7 @@ static int log_one_block(struct log_writes_c *lc,
|
|||
}
|
||||
bio->bi_iter.bi_size = 0;
|
||||
bio->bi_iter.bi_sector = sector;
|
||||
bio->bi_bdev = lc->logdev->bdev;
|
||||
bio_set_dev(bio, lc->logdev->bdev);
|
||||
bio->bi_end_io = log_end_io;
|
||||
bio->bi_private = lc;
|
||||
bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
|
||||
|
|
@ -285,7 +285,7 @@ static int log_one_block(struct log_writes_c *lc,
|
|||
}
|
||||
bio->bi_iter.bi_size = 0;
|
||||
bio->bi_iter.bi_sector = sector;
|
||||
bio->bi_bdev = lc->logdev->bdev;
|
||||
bio_set_dev(bio, lc->logdev->bdev);
|
||||
bio->bi_end_io = log_end_io;
|
||||
bio->bi_private = lc;
|
||||
bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
|
||||
|
|
@ -539,7 +539,7 @@ static void normal_map_bio(struct dm_target *ti, struct bio *bio)
|
|||
{
|
||||
struct log_writes_c *lc = ti->private;
|
||||
|
||||
bio->bi_bdev = lc->dev->bdev;
|
||||
bio_set_dev(bio, lc->dev->bdev);
|
||||
}
|
||||
|
||||
static int log_writes_map(struct dm_target *ti, struct bio *bio)
|
||||
|
|
|
|||
|
|
@ -565,7 +565,7 @@ static int __multipath_map_bio(struct multipath *m, struct bio *bio, struct dm_m
|
|||
mpio->nr_bytes = nr_bytes;
|
||||
|
||||
bio->bi_status = 0;
|
||||
bio->bi_bdev = pgpath->path.dev->bdev;
|
||||
bio_set_dev(bio, pgpath->path.dev->bdev);
|
||||
bio->bi_opf |= REQ_FAILFAST_TRANSPORT;
|
||||
|
||||
if (pgpath->pg->ps.type->start_io)
|
||||
|
|
|
|||
|
|
@ -145,7 +145,7 @@ static void dispatch_bios(void *context, struct bio_list *bio_list)
|
|||
|
||||
struct dm_raid1_bio_record {
|
||||
struct mirror *m;
|
||||
/* if details->bi_bdev == NULL, details were not saved */
|
||||
/* if details->bi_disk == NULL, details were not saved */
|
||||
struct dm_bio_details details;
|
||||
region_t write_region;
|
||||
};
|
||||
|
|
@ -464,7 +464,7 @@ static sector_t map_sector(struct mirror *m, struct bio *bio)
|
|||
|
||||
static void map_bio(struct mirror *m, struct bio *bio)
|
||||
{
|
||||
bio->bi_bdev = m->dev->bdev;
|
||||
bio_set_dev(bio, m->dev->bdev);
|
||||
bio->bi_iter.bi_sector = map_sector(m, bio);
|
||||
}
|
||||
|
||||
|
|
@ -1199,7 +1199,7 @@ static int mirror_map(struct dm_target *ti, struct bio *bio)
|
|||
struct dm_raid1_bio_record *bio_record =
|
||||
dm_per_bio_data(bio, sizeof(struct dm_raid1_bio_record));
|
||||
|
||||
bio_record->details.bi_bdev = NULL;
|
||||
bio_record->details.bi_disk = NULL;
|
||||
|
||||
if (rw == WRITE) {
|
||||
/* Save region for mirror_end_io() handler */
|
||||
|
|
@ -1266,7 +1266,7 @@ static int mirror_end_io(struct dm_target *ti, struct bio *bio,
|
|||
goto out;
|
||||
|
||||
if (unlikely(*error)) {
|
||||
if (!bio_record->details.bi_bdev) {
|
||||
if (!bio_record->details.bi_disk) {
|
||||
/*
|
||||
* There wasn't enough memory to record necessary
|
||||
* information for a retry or there was no other
|
||||
|
|
@ -1291,7 +1291,7 @@ static int mirror_end_io(struct dm_target *ti, struct bio *bio,
|
|||
bd = &bio_record->details;
|
||||
|
||||
dm_bio_restore(bd, bio);
|
||||
bio_record->details.bi_bdev = NULL;
|
||||
bio_record->details.bi_disk = NULL;
|
||||
bio->bi_status = 0;
|
||||
|
||||
queue_bio(ms, bio, rw);
|
||||
|
|
@ -1301,7 +1301,7 @@ static int mirror_end_io(struct dm_target *ti, struct bio *bio,
|
|||
}
|
||||
|
||||
out:
|
||||
bio_record->details.bi_bdev = NULL;
|
||||
bio_record->details.bi_disk = NULL;
|
||||
|
||||
return DM_ENDIO_DONE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1663,7 +1663,7 @@ __find_pending_exception(struct dm_snapshot *s,
|
|||
static void remap_exception(struct dm_snapshot *s, struct dm_exception *e,
|
||||
struct bio *bio, chunk_t chunk)
|
||||
{
|
||||
bio->bi_bdev = s->cow->bdev;
|
||||
bio_set_dev(bio, s->cow->bdev);
|
||||
bio->bi_iter.bi_sector =
|
||||
chunk_to_sector(s->store, dm_chunk_number(e->new_chunk) +
|
||||
(chunk - e->old_chunk)) +
|
||||
|
|
@ -1681,7 +1681,7 @@ static int snapshot_map(struct dm_target *ti, struct bio *bio)
|
|||
init_tracked_chunk(bio);
|
||||
|
||||
if (bio->bi_opf & REQ_PREFLUSH) {
|
||||
bio->bi_bdev = s->cow->bdev;
|
||||
bio_set_dev(bio, s->cow->bdev);
|
||||
return DM_MAPIO_REMAPPED;
|
||||
}
|
||||
|
||||
|
|
@ -1769,7 +1769,7 @@ static int snapshot_map(struct dm_target *ti, struct bio *bio)
|
|||
goto out;
|
||||
}
|
||||
} else {
|
||||
bio->bi_bdev = s->origin->bdev;
|
||||
bio_set_dev(bio, s->origin->bdev);
|
||||
track_chunk(s, bio, chunk);
|
||||
}
|
||||
|
||||
|
|
@ -1802,9 +1802,9 @@ static int snapshot_merge_map(struct dm_target *ti, struct bio *bio)
|
|||
|
||||
if (bio->bi_opf & REQ_PREFLUSH) {
|
||||
if (!dm_bio_get_target_bio_nr(bio))
|
||||
bio->bi_bdev = s->origin->bdev;
|
||||
bio_set_dev(bio, s->origin->bdev);
|
||||
else
|
||||
bio->bi_bdev = s->cow->bdev;
|
||||
bio_set_dev(bio, s->cow->bdev);
|
||||
return DM_MAPIO_REMAPPED;
|
||||
}
|
||||
|
||||
|
|
@ -1824,7 +1824,7 @@ static int snapshot_merge_map(struct dm_target *ti, struct bio *bio)
|
|||
chunk >= s->first_merging_chunk &&
|
||||
chunk < (s->first_merging_chunk +
|
||||
s->num_merging_chunks)) {
|
||||
bio->bi_bdev = s->origin->bdev;
|
||||
bio_set_dev(bio, s->origin->bdev);
|
||||
bio_list_add(&s->bios_queued_during_merge, bio);
|
||||
r = DM_MAPIO_SUBMITTED;
|
||||
goto out_unlock;
|
||||
|
|
@ -1838,7 +1838,7 @@ static int snapshot_merge_map(struct dm_target *ti, struct bio *bio)
|
|||
}
|
||||
|
||||
redirect_to_origin:
|
||||
bio->bi_bdev = s->origin->bdev;
|
||||
bio_set_dev(bio, s->origin->bdev);
|
||||
|
||||
if (bio_data_dir(bio) == WRITE) {
|
||||
up_write(&s->lock);
|
||||
|
|
@ -2285,7 +2285,7 @@ static int origin_map(struct dm_target *ti, struct bio *bio)
|
|||
struct dm_origin *o = ti->private;
|
||||
unsigned available_sectors;
|
||||
|
||||
bio->bi_bdev = o->dev->bdev;
|
||||
bio_set_dev(bio, o->dev->bdev);
|
||||
|
||||
if (unlikely(bio->bi_opf & REQ_PREFLUSH))
|
||||
return DM_MAPIO_REMAPPED;
|
||||
|
|
|
|||
|
|
@ -270,7 +270,7 @@ static int stripe_map_range(struct stripe_c *sc, struct bio *bio,
|
|||
stripe_map_range_sector(sc, bio_end_sector(bio),
|
||||
target_stripe, &end);
|
||||
if (begin < end) {
|
||||
bio->bi_bdev = sc->stripe[target_stripe].dev->bdev;
|
||||
bio_set_dev(bio, sc->stripe[target_stripe].dev->bdev);
|
||||
bio->bi_iter.bi_sector = begin +
|
||||
sc->stripe[target_stripe].physical_start;
|
||||
bio->bi_iter.bi_size = to_bytes(end - begin);
|
||||
|
|
@ -291,7 +291,7 @@ static int stripe_map(struct dm_target *ti, struct bio *bio)
|
|||
if (bio->bi_opf & REQ_PREFLUSH) {
|
||||
target_bio_nr = dm_bio_get_target_bio_nr(bio);
|
||||
BUG_ON(target_bio_nr >= sc->stripes);
|
||||
bio->bi_bdev = sc->stripe[target_bio_nr].dev->bdev;
|
||||
bio_set_dev(bio, sc->stripe[target_bio_nr].dev->bdev);
|
||||
return DM_MAPIO_REMAPPED;
|
||||
}
|
||||
if (unlikely(bio_op(bio) == REQ_OP_DISCARD) ||
|
||||
|
|
@ -306,7 +306,7 @@ static int stripe_map(struct dm_target *ti, struct bio *bio)
|
|||
&stripe, &bio->bi_iter.bi_sector);
|
||||
|
||||
bio->bi_iter.bi_sector += sc->stripe[stripe].physical_start;
|
||||
bio->bi_bdev = sc->stripe[stripe].dev->bdev;
|
||||
bio_set_dev(bio, sc->stripe[stripe].dev->bdev);
|
||||
|
||||
return DM_MAPIO_REMAPPED;
|
||||
}
|
||||
|
|
@ -430,9 +430,7 @@ static int stripe_end_io(struct dm_target *ti, struct bio *bio,
|
|||
return DM_ENDIO_DONE;
|
||||
|
||||
memset(major_minor, 0, sizeof(major_minor));
|
||||
sprintf(major_minor, "%d:%d",
|
||||
MAJOR(disk_devt(bio->bi_bdev->bd_disk)),
|
||||
MINOR(disk_devt(bio->bi_bdev->bd_disk)));
|
||||
sprintf(major_minor, "%d:%d", MAJOR(bio_dev(bio)), MINOR(bio_dev(bio)));
|
||||
|
||||
/*
|
||||
* Test to see which stripe drive triggered the event
|
||||
|
|
|
|||
|
|
@ -322,7 +322,7 @@ static int switch_map(struct dm_target *ti, struct bio *bio)
|
|||
sector_t offset = dm_target_offset(ti, bio->bi_iter.bi_sector);
|
||||
unsigned path_nr = switch_get_path_nr(sctx, offset);
|
||||
|
||||
bio->bi_bdev = sctx->path_list[path_nr].dmdev->bdev;
|
||||
bio_set_dev(bio, sctx->path_list[path_nr].dmdev->bdev);
|
||||
bio->bi_iter.bi_sector = sctx->path_list[path_nr].start + offset;
|
||||
|
||||
return DM_MAPIO_REMAPPED;
|
||||
|
|
|
|||
|
|
@ -679,7 +679,7 @@ static void remap(struct thin_c *tc, struct bio *bio, dm_block_t block)
|
|||
struct pool *pool = tc->pool;
|
||||
sector_t bi_sector = bio->bi_iter.bi_sector;
|
||||
|
||||
bio->bi_bdev = tc->pool_dev->bdev;
|
||||
bio_set_dev(bio, tc->pool_dev->bdev);
|
||||
if (block_size_is_power_of_two(pool))
|
||||
bio->bi_iter.bi_sector =
|
||||
(block << pool->sectors_per_block_shift) |
|
||||
|
|
@ -691,7 +691,7 @@ static void remap(struct thin_c *tc, struct bio *bio, dm_block_t block)
|
|||
|
||||
static void remap_to_origin(struct thin_c *tc, struct bio *bio)
|
||||
{
|
||||
bio->bi_bdev = tc->origin_dev->bdev;
|
||||
bio_set_dev(bio, tc->origin_dev->bdev);
|
||||
}
|
||||
|
||||
static int bio_triggers_commit(struct thin_c *tc, struct bio *bio)
|
||||
|
|
@ -3313,7 +3313,7 @@ static int pool_map(struct dm_target *ti, struct bio *bio)
|
|||
* As this is a singleton target, ti->begin is always zero.
|
||||
*/
|
||||
spin_lock_irqsave(&pool->lock, flags);
|
||||
bio->bi_bdev = pt->data_dev->bdev;
|
||||
bio_set_dev(bio, pt->data_dev->bdev);
|
||||
r = DM_MAPIO_REMAPPED;
|
||||
spin_unlock_irqrestore(&pool->lock, flags);
|
||||
|
||||
|
|
|
|||
|
|
@ -637,7 +637,7 @@ static int verity_map(struct dm_target *ti, struct bio *bio)
|
|||
struct dm_verity *v = ti->private;
|
||||
struct dm_verity_io *io;
|
||||
|
||||
bio->bi_bdev = v->data_dev->bdev;
|
||||
bio_set_dev(bio, v->data_dev->bdev);
|
||||
bio->bi_iter.bi_sector = verity_map_sector(v, bio->bi_iter.bi_sector);
|
||||
|
||||
if (((unsigned)bio->bi_iter.bi_sector | bio_sectors(bio)) &
|
||||
|
|
|
|||
|
|
@ -409,7 +409,7 @@ static struct dmz_mblock *dmz_fetch_mblock(struct dmz_metadata *zmd,
|
|||
}
|
||||
|
||||
bio->bi_iter.bi_sector = dmz_blk2sect(block);
|
||||
bio->bi_bdev = zmd->dev->bdev;
|
||||
bio_set_dev(bio, zmd->dev->bdev);
|
||||
bio->bi_private = mblk;
|
||||
bio->bi_end_io = dmz_mblock_bio_end_io;
|
||||
bio_set_op_attrs(bio, REQ_OP_READ, REQ_META | REQ_PRIO);
|
||||
|
|
@ -564,7 +564,7 @@ static void dmz_write_mblock(struct dmz_metadata *zmd, struct dmz_mblock *mblk,
|
|||
set_bit(DMZ_META_WRITING, &mblk->state);
|
||||
|
||||
bio->bi_iter.bi_sector = dmz_blk2sect(block);
|
||||
bio->bi_bdev = zmd->dev->bdev;
|
||||
bio_set_dev(bio, zmd->dev->bdev);
|
||||
bio->bi_private = mblk;
|
||||
bio->bi_end_io = dmz_mblock_bio_end_io;
|
||||
bio_set_op_attrs(bio, REQ_OP_WRITE, REQ_META | REQ_PRIO);
|
||||
|
|
@ -586,7 +586,7 @@ static int dmz_rdwr_block(struct dmz_metadata *zmd, int op, sector_t block,
|
|||
return -ENOMEM;
|
||||
|
||||
bio->bi_iter.bi_sector = dmz_blk2sect(block);
|
||||
bio->bi_bdev = zmd->dev->bdev;
|
||||
bio_set_dev(bio, zmd->dev->bdev);
|
||||
bio_set_op_attrs(bio, op, REQ_SYNC | REQ_META | REQ_PRIO);
|
||||
bio_add_page(bio, page, DMZ_BLOCK_SIZE, 0);
|
||||
ret = submit_bio_wait(bio);
|
||||
|
|
|
|||
|
|
@ -238,7 +238,7 @@ static void dmz_submit_write_bio(struct dmz_target *dmz, struct dm_zone *zone,
|
|||
struct dmz_bioctx *bioctx = dm_per_bio_data(bio, sizeof(struct dmz_bioctx));
|
||||
|
||||
/* Setup and submit the BIO */
|
||||
bio->bi_bdev = dmz->dev->bdev;
|
||||
bio_set_dev(bio, dmz->dev->bdev);
|
||||
bio->bi_iter.bi_sector = dmz_start_sect(dmz->metadata, zone) + dmz_blk2sect(chunk_block);
|
||||
atomic_inc(&bioctx->ref);
|
||||
generic_make_request(bio);
|
||||
|
|
@ -586,7 +586,7 @@ static int dmz_map(struct dm_target *ti, struct bio *bio)
|
|||
(unsigned long long)dmz_chunk_block(dmz->dev, dmz_bio_block(bio)),
|
||||
(unsigned int)dmz_bio_blocks(bio));
|
||||
|
||||
bio->bi_bdev = dev->bdev;
|
||||
bio_set_dev(bio, dev->bdev);
|
||||
|
||||
if (!nr_sectors && bio_op(bio) != REQ_OP_WRITE)
|
||||
return DM_MAPIO_REMAPPED;
|
||||
|
|
|
|||
|
|
@ -510,7 +510,7 @@ static void start_io_acct(struct dm_io *io)
|
|||
io->start_time = jiffies;
|
||||
|
||||
cpu = part_stat_lock();
|
||||
part_round_stats(cpu, &dm_disk(md)->part0);
|
||||
part_round_stats(md->queue, cpu, &dm_disk(md)->part0);
|
||||
part_stat_unlock();
|
||||
atomic_set(&dm_disk(md)->part0.in_flight[rw],
|
||||
atomic_inc_return(&md->pending[rw]));
|
||||
|
|
@ -529,7 +529,7 @@ static void end_io_acct(struct dm_io *io)
|
|||
int pending;
|
||||
int rw = bio_data_dir(bio);
|
||||
|
||||
generic_end_io_acct(rw, &dm_disk(md)->part0, io->start_time);
|
||||
generic_end_io_acct(md->queue, rw, &dm_disk(md)->part0, io->start_time);
|
||||
|
||||
if (unlikely(dm_stats_used(&md->stats)))
|
||||
dm_stats_account_io(&md->stats, bio_data_dir(bio),
|
||||
|
|
@ -841,10 +841,10 @@ static void clone_endio(struct bio *bio)
|
|||
|
||||
if (unlikely(error == BLK_STS_TARGET)) {
|
||||
if (bio_op(bio) == REQ_OP_WRITE_SAME &&
|
||||
!bdev_get_queue(bio->bi_bdev)->limits.max_write_same_sectors)
|
||||
!bio->bi_disk->queue->limits.max_write_same_sectors)
|
||||
disable_write_same(md);
|
||||
if (bio_op(bio) == REQ_OP_WRITE_ZEROES &&
|
||||
!bdev_get_queue(bio->bi_bdev)->limits.max_write_zeroes_sectors)
|
||||
!bio->bi_disk->queue->limits.max_write_zeroes_sectors)
|
||||
disable_write_zeroes(md);
|
||||
}
|
||||
|
||||
|
|
@ -1205,8 +1205,8 @@ static void __map_bio(struct dm_target_io *tio)
|
|||
break;
|
||||
case DM_MAPIO_REMAPPED:
|
||||
/* the bio has been remapped so dispatch it */
|
||||
trace_block_bio_remap(bdev_get_queue(clone->bi_bdev), clone,
|
||||
tio->io->bio->bi_bdev->bd_dev, sector);
|
||||
trace_block_bio_remap(clone->bi_disk->queue, clone,
|
||||
bio_dev(tio->io->bio), sector);
|
||||
generic_make_request(clone);
|
||||
break;
|
||||
case DM_MAPIO_KILL:
|
||||
|
|
@ -1532,7 +1532,7 @@ static blk_qc_t dm_make_request(struct request_queue *q, struct bio *bio)
|
|||
|
||||
map = dm_get_live_table(md, &srcu_idx);
|
||||
|
||||
generic_start_io_acct(rw, bio_sectors(bio), &dm_disk(md)->part0);
|
||||
generic_start_io_acct(q, rw, bio_sectors(bio), &dm_disk(md)->part0);
|
||||
|
||||
/* if we're suspended, we have to queue this io for later */
|
||||
if (unlikely(test_bit(DMF_BLOCK_IO_FOR_SUSPEND, &md->flags))) {
|
||||
|
|
@ -1786,7 +1786,7 @@ static struct mapped_device *alloc_dev(int minor)
|
|||
goto bad;
|
||||
|
||||
bio_init(&md->flush_bio, NULL, 0);
|
||||
md->flush_bio.bi_bdev = md->bdev;
|
||||
bio_set_dev(&md->flush_bio, md->bdev);
|
||||
md->flush_bio.bi_opf = REQ_OP_WRITE | REQ_PREFLUSH | REQ_SYNC;
|
||||
|
||||
dm_stats_init(&md->stats);
|
||||
|
|
|
|||
|
|
@ -216,12 +216,12 @@ static bool faulty_make_request(struct mddev *mddev, struct bio *bio)
|
|||
if (failit) {
|
||||
struct bio *b = bio_clone_fast(bio, GFP_NOIO, mddev->bio_set);
|
||||
|
||||
b->bi_bdev = conf->rdev->bdev;
|
||||
bio_set_dev(b, conf->rdev->bdev);
|
||||
b->bi_private = bio;
|
||||
b->bi_end_io = faulty_fail;
|
||||
bio = b;
|
||||
} else
|
||||
bio->bi_bdev = conf->rdev->bdev;
|
||||
bio_set_dev(bio, conf->rdev->bdev);
|
||||
|
||||
generic_make_request(bio);
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -275,17 +275,17 @@ static bool linear_make_request(struct mddev *mddev, struct bio *bio)
|
|||
bio = split;
|
||||
}
|
||||
|
||||
bio->bi_bdev = tmp_dev->rdev->bdev;
|
||||
bio_set_dev(bio, tmp_dev->rdev->bdev);
|
||||
bio->bi_iter.bi_sector = bio->bi_iter.bi_sector -
|
||||
start_sector + data_offset;
|
||||
|
||||
if (unlikely((bio_op(bio) == REQ_OP_DISCARD) &&
|
||||
!blk_queue_discard(bdev_get_queue(bio->bi_bdev)))) {
|
||||
!blk_queue_discard(bio->bi_disk->queue))) {
|
||||
/* Just ignore it */
|
||||
bio_endio(bio);
|
||||
} else {
|
||||
if (mddev->gendisk)
|
||||
trace_block_bio_remap(bdev_get_queue(bio->bi_bdev),
|
||||
trace_block_bio_remap(bio->bi_disk->queue,
|
||||
bio, disk_devt(mddev->gendisk),
|
||||
bio_sector);
|
||||
mddev_check_writesame(mddev, bio);
|
||||
|
|
|
|||
|
|
@ -422,7 +422,7 @@ static void submit_flushes(struct work_struct *ws)
|
|||
bi = bio_alloc_mddev(GFP_NOIO, 0, mddev);
|
||||
bi->bi_end_io = md_end_flush;
|
||||
bi->bi_private = rdev;
|
||||
bi->bi_bdev = rdev->bdev;
|
||||
bio_set_dev(bi, rdev->bdev);
|
||||
bi->bi_opf = REQ_OP_WRITE | REQ_PREFLUSH;
|
||||
atomic_inc(&mddev->flush_pending);
|
||||
submit_bio(bi);
|
||||
|
|
@ -772,7 +772,7 @@ void md_super_write(struct mddev *mddev, struct md_rdev *rdev,
|
|||
|
||||
atomic_inc(&rdev->nr_pending);
|
||||
|
||||
bio->bi_bdev = rdev->meta_bdev ? rdev->meta_bdev : rdev->bdev;
|
||||
bio_set_dev(bio, rdev->meta_bdev ? rdev->meta_bdev : rdev->bdev);
|
||||
bio->bi_iter.bi_sector = sector;
|
||||
bio_add_page(bio, page, size, 0);
|
||||
bio->bi_private = rdev;
|
||||
|
|
@ -803,8 +803,10 @@ int sync_page_io(struct md_rdev *rdev, sector_t sector, int size,
|
|||
struct bio *bio = md_bio_alloc_sync(rdev->mddev);
|
||||
int ret;
|
||||
|
||||
bio->bi_bdev = (metadata_op && rdev->meta_bdev) ?
|
||||
rdev->meta_bdev : rdev->bdev;
|
||||
if (metadata_op && rdev->meta_bdev)
|
||||
bio_set_dev(bio, rdev->meta_bdev);
|
||||
else
|
||||
bio_set_dev(bio, rdev->bdev);
|
||||
bio_set_op_attrs(bio, op, op_flags);
|
||||
if (metadata_op)
|
||||
bio->bi_iter.bi_sector = sector + rdev->sb_start;
|
||||
|
|
|
|||
|
|
@ -509,6 +509,11 @@ static inline void md_sync_acct(struct block_device *bdev, unsigned long nr_sect
|
|||
atomic_add(nr_sectors, &bdev->bd_contains->bd_disk->sync_io);
|
||||
}
|
||||
|
||||
static inline void md_sync_acct_bio(struct bio *bio, unsigned long nr_sectors)
|
||||
{
|
||||
atomic_add(nr_sectors, &bio->bi_disk->sync_io);
|
||||
}
|
||||
|
||||
struct md_personality
|
||||
{
|
||||
char *name;
|
||||
|
|
@ -721,14 +726,14 @@ static inline void mddev_clear_unsupported_flags(struct mddev *mddev,
|
|||
static inline void mddev_check_writesame(struct mddev *mddev, struct bio *bio)
|
||||
{
|
||||
if (bio_op(bio) == REQ_OP_WRITE_SAME &&
|
||||
!bdev_get_queue(bio->bi_bdev)->limits.max_write_same_sectors)
|
||||
!bio->bi_disk->queue->limits.max_write_same_sectors)
|
||||
mddev->queue->limits.max_write_same_sectors = 0;
|
||||
}
|
||||
|
||||
static inline void mddev_check_write_zeroes(struct mddev *mddev, struct bio *bio)
|
||||
{
|
||||
if (bio_op(bio) == REQ_OP_WRITE_ZEROES &&
|
||||
!bdev_get_queue(bio->bi_bdev)->limits.max_write_zeroes_sectors)
|
||||
!bio->bi_disk->queue->limits.max_write_zeroes_sectors)
|
||||
mddev->queue->limits.max_write_zeroes_sectors = 0;
|
||||
}
|
||||
#endif /* _MD_MD_H */
|
||||
|
|
|
|||
|
|
@ -134,7 +134,7 @@ static bool multipath_make_request(struct mddev *mddev, struct bio * bio)
|
|||
__bio_clone_fast(&mp_bh->bio, bio);
|
||||
|
||||
mp_bh->bio.bi_iter.bi_sector += multipath->rdev->data_offset;
|
||||
mp_bh->bio.bi_bdev = multipath->rdev->bdev;
|
||||
bio_set_dev(&mp_bh->bio, multipath->rdev->bdev);
|
||||
mp_bh->bio.bi_opf |= REQ_FAILFAST_TRANSPORT;
|
||||
mp_bh->bio.bi_end_io = multipath_end_request;
|
||||
mp_bh->bio.bi_private = mp_bh;
|
||||
|
|
@ -345,17 +345,17 @@ static void multipathd(struct md_thread *thread)
|
|||
|
||||
if ((mp_bh->path = multipath_map (conf))<0) {
|
||||
pr_err("multipath: %s: unrecoverable IO read error for block %llu\n",
|
||||
bdevname(bio->bi_bdev,b),
|
||||
bio_devname(bio, b),
|
||||
(unsigned long long)bio->bi_iter.bi_sector);
|
||||
multipath_end_bh_io(mp_bh, BLK_STS_IOERR);
|
||||
} else {
|
||||
pr_err("multipath: %s: redirecting sector %llu to another IO path\n",
|
||||
bdevname(bio->bi_bdev,b),
|
||||
bio_devname(bio, b),
|
||||
(unsigned long long)bio->bi_iter.bi_sector);
|
||||
*bio = *(mp_bh->master_bio);
|
||||
bio->bi_iter.bi_sector +=
|
||||
conf->multipaths[mp_bh->path].rdev->data_offset;
|
||||
bio->bi_bdev = conf->multipaths[mp_bh->path].rdev->bdev;
|
||||
bio_set_dev(bio, conf->multipaths[mp_bh->path].rdev->bdev);
|
||||
bio->bi_opf |= REQ_FAILFAST_TRANSPORT;
|
||||
bio->bi_end_io = multipath_end_request;
|
||||
bio->bi_private = mp_bh;
|
||||
|
|
|
|||
|
|
@ -588,14 +588,13 @@ static bool raid0_make_request(struct mddev *mddev, struct bio *bio)
|
|||
|
||||
zone = find_zone(mddev->private, §or);
|
||||
tmp_dev = map_sector(mddev, zone, sector, §or);
|
||||
bio->bi_bdev = tmp_dev->bdev;
|
||||
bio_set_dev(bio, tmp_dev->bdev);
|
||||
bio->bi_iter.bi_sector = sector + zone->dev_start +
|
||||
tmp_dev->data_offset;
|
||||
|
||||
if (mddev->gendisk)
|
||||
trace_block_bio_remap(bdev_get_queue(bio->bi_bdev),
|
||||
bio, disk_devt(mddev->gendisk),
|
||||
bio_sector);
|
||||
trace_block_bio_remap(bio->bi_disk->queue, bio,
|
||||
disk_devt(mddev->gendisk), bio_sector);
|
||||
mddev_check_writesame(mddev, bio);
|
||||
mddev_check_write_zeroes(mddev, bio);
|
||||
generic_make_request(bio);
|
||||
|
|
|
|||
|
|
@ -786,13 +786,13 @@ static void flush_bio_list(struct r1conf *conf, struct bio *bio)
|
|||
|
||||
while (bio) { /* submit pending writes */
|
||||
struct bio *next = bio->bi_next;
|
||||
struct md_rdev *rdev = (void*)bio->bi_bdev;
|
||||
struct md_rdev *rdev = (void *)bio->bi_disk;
|
||||
bio->bi_next = NULL;
|
||||
bio->bi_bdev = rdev->bdev;
|
||||
bio_set_dev(bio, rdev->bdev);
|
||||
if (test_bit(Faulty, &rdev->flags)) {
|
||||
bio_io_error(bio);
|
||||
} else if (unlikely((bio_op(bio) == REQ_OP_DISCARD) &&
|
||||
!blk_queue_discard(bdev_get_queue(bio->bi_bdev))))
|
||||
!blk_queue_discard(bio->bi_disk->queue)))
|
||||
/* Just ignore it */
|
||||
bio_endio(bio);
|
||||
else
|
||||
|
|
@ -1273,7 +1273,7 @@ static void raid1_read_request(struct mddev *mddev, struct bio *bio,
|
|||
|
||||
read_bio->bi_iter.bi_sector = r1_bio->sector +
|
||||
mirror->rdev->data_offset;
|
||||
read_bio->bi_bdev = mirror->rdev->bdev;
|
||||
bio_set_dev(read_bio, mirror->rdev->bdev);
|
||||
read_bio->bi_end_io = raid1_end_read_request;
|
||||
bio_set_op_attrs(read_bio, op, do_sync);
|
||||
if (test_bit(FailFast, &mirror->rdev->flags) &&
|
||||
|
|
@ -1282,9 +1282,8 @@ static void raid1_read_request(struct mddev *mddev, struct bio *bio,
|
|||
read_bio->bi_private = r1_bio;
|
||||
|
||||
if (mddev->gendisk)
|
||||
trace_block_bio_remap(bdev_get_queue(read_bio->bi_bdev),
|
||||
read_bio, disk_devt(mddev->gendisk),
|
||||
r1_bio->sector);
|
||||
trace_block_bio_remap(read_bio->bi_disk->queue, read_bio,
|
||||
disk_devt(mddev->gendisk), r1_bio->sector);
|
||||
|
||||
generic_make_request(read_bio);
|
||||
}
|
||||
|
|
@ -1496,7 +1495,7 @@ static void raid1_write_request(struct mddev *mddev, struct bio *bio,
|
|||
|
||||
mbio->bi_iter.bi_sector = (r1_bio->sector +
|
||||
conf->mirrors[i].rdev->data_offset);
|
||||
mbio->bi_bdev = conf->mirrors[i].rdev->bdev;
|
||||
bio_set_dev(mbio, conf->mirrors[i].rdev->bdev);
|
||||
mbio->bi_end_io = raid1_end_write_request;
|
||||
mbio->bi_opf = bio_op(bio) | (bio->bi_opf & (REQ_SYNC | REQ_FUA));
|
||||
if (test_bit(FailFast, &conf->mirrors[i].rdev->flags) &&
|
||||
|
|
@ -1508,11 +1507,11 @@ static void raid1_write_request(struct mddev *mddev, struct bio *bio,
|
|||
atomic_inc(&r1_bio->remaining);
|
||||
|
||||
if (mddev->gendisk)
|
||||
trace_block_bio_remap(bdev_get_queue(mbio->bi_bdev),
|
||||
trace_block_bio_remap(mbio->bi_disk->queue,
|
||||
mbio, disk_devt(mddev->gendisk),
|
||||
r1_bio->sector);
|
||||
/* flush_pending_writes() needs access to the rdev so...*/
|
||||
mbio->bi_bdev = (void*)conf->mirrors[i].rdev;
|
||||
mbio->bi_disk = (void *)conf->mirrors[i].rdev;
|
||||
|
||||
cb = blk_check_plugged(raid1_unplug, mddev, sizeof(*plug));
|
||||
if (cb)
|
||||
|
|
@ -1990,8 +1989,7 @@ static int fix_sync_read_error(struct r1bio *r1_bio)
|
|||
* Don't fail devices as that won't really help.
|
||||
*/
|
||||
pr_crit_ratelimited("md/raid1:%s: %s: unrecoverable I/O read error for block %llu\n",
|
||||
mdname(mddev),
|
||||
bdevname(bio->bi_bdev, b),
|
||||
mdname(mddev), bio_devname(bio, b),
|
||||
(unsigned long long)r1_bio->sector);
|
||||
for (d = 0; d < conf->raid_disks * 2; d++) {
|
||||
rdev = conf->mirrors[d].rdev;
|
||||
|
|
@ -2082,7 +2080,7 @@ static void process_checks(struct r1bio *r1_bio)
|
|||
b->bi_status = status;
|
||||
b->bi_iter.bi_sector = r1_bio->sector +
|
||||
conf->mirrors[i].rdev->data_offset;
|
||||
b->bi_bdev = conf->mirrors[i].rdev->bdev;
|
||||
bio_set_dev(b, conf->mirrors[i].rdev->bdev);
|
||||
b->bi_end_io = end_sync_read;
|
||||
rp->raid_bio = r1_bio;
|
||||
b->bi_private = rp;
|
||||
|
|
@ -2350,7 +2348,7 @@ static int narrow_write_error(struct r1bio *r1_bio, int i)
|
|||
|
||||
bio_trim(wbio, sector - r1_bio->sector, sectors);
|
||||
wbio->bi_iter.bi_sector += rdev->data_offset;
|
||||
wbio->bi_bdev = rdev->bdev;
|
||||
bio_set_dev(wbio, rdev->bdev);
|
||||
|
||||
if (submit_bio_wait(wbio) < 0)
|
||||
/* failure! */
|
||||
|
|
@ -2440,7 +2438,6 @@ static void handle_read_error(struct r1conf *conf, struct r1bio *r1_bio)
|
|||
struct mddev *mddev = conf->mddev;
|
||||
struct bio *bio;
|
||||
struct md_rdev *rdev;
|
||||
dev_t bio_dev;
|
||||
sector_t bio_sector;
|
||||
|
||||
clear_bit(R1BIO_ReadError, &r1_bio->state);
|
||||
|
|
@ -2454,7 +2451,6 @@ static void handle_read_error(struct r1conf *conf, struct r1bio *r1_bio)
|
|||
*/
|
||||
|
||||
bio = r1_bio->bios[r1_bio->read_disk];
|
||||
bio_dev = bio->bi_bdev->bd_dev;
|
||||
bio_sector = conf->mirrors[r1_bio->read_disk].rdev->data_offset + r1_bio->sector;
|
||||
bio_put(bio);
|
||||
r1_bio->bios[r1_bio->read_disk] = NULL;
|
||||
|
|
@ -2727,7 +2723,7 @@ static sector_t raid1_sync_request(struct mddev *mddev, sector_t sector_nr,
|
|||
if (bio->bi_end_io) {
|
||||
atomic_inc(&rdev->nr_pending);
|
||||
bio->bi_iter.bi_sector = sector_nr + rdev->data_offset;
|
||||
bio->bi_bdev = rdev->bdev;
|
||||
bio_set_dev(bio, rdev->bdev);
|
||||
if (test_bit(FailFast, &rdev->flags))
|
||||
bio->bi_opf |= MD_FAILFAST;
|
||||
}
|
||||
|
|
@ -2853,7 +2849,7 @@ static sector_t raid1_sync_request(struct mddev *mddev, sector_t sector_nr,
|
|||
bio = r1_bio->bios[i];
|
||||
if (bio->bi_end_io == end_sync_read) {
|
||||
read_targets--;
|
||||
md_sync_acct(bio->bi_bdev, nr_sectors);
|
||||
md_sync_acct_bio(bio, nr_sectors);
|
||||
if (read_targets == 1)
|
||||
bio->bi_opf &= ~MD_FAILFAST;
|
||||
generic_make_request(bio);
|
||||
|
|
@ -2862,7 +2858,7 @@ static sector_t raid1_sync_request(struct mddev *mddev, sector_t sector_nr,
|
|||
} else {
|
||||
atomic_set(&r1_bio->remaining, 1);
|
||||
bio = r1_bio->bios[r1_bio->read_disk];
|
||||
md_sync_acct(bio->bi_bdev, nr_sectors);
|
||||
md_sync_acct_bio(bio, nr_sectors);
|
||||
if (read_targets == 1)
|
||||
bio->bi_opf &= ~MD_FAILFAST;
|
||||
generic_make_request(bio);
|
||||
|
|
|
|||
|
|
@ -901,13 +901,13 @@ static void flush_pending_writes(struct r10conf *conf)
|
|||
|
||||
while (bio) { /* submit pending writes */
|
||||
struct bio *next = bio->bi_next;
|
||||
struct md_rdev *rdev = (void*)bio->bi_bdev;
|
||||
struct md_rdev *rdev = (void*)bio->bi_disk;
|
||||
bio->bi_next = NULL;
|
||||
bio->bi_bdev = rdev->bdev;
|
||||
bio_set_dev(bio, rdev->bdev);
|
||||
if (test_bit(Faulty, &rdev->flags)) {
|
||||
bio_io_error(bio);
|
||||
} else if (unlikely((bio_op(bio) == REQ_OP_DISCARD) &&
|
||||
!blk_queue_discard(bdev_get_queue(bio->bi_bdev))))
|
||||
!blk_queue_discard(bio->bi_disk->queue)))
|
||||
/* Just ignore it */
|
||||
bio_endio(bio);
|
||||
else
|
||||
|
|
@ -1085,13 +1085,13 @@ static void raid10_unplug(struct blk_plug_cb *cb, bool from_schedule)
|
|||
|
||||
while (bio) { /* submit pending writes */
|
||||
struct bio *next = bio->bi_next;
|
||||
struct md_rdev *rdev = (void*)bio->bi_bdev;
|
||||
struct md_rdev *rdev = (void*)bio->bi_disk;
|
||||
bio->bi_next = NULL;
|
||||
bio->bi_bdev = rdev->bdev;
|
||||
bio_set_dev(bio, rdev->bdev);
|
||||
if (test_bit(Faulty, &rdev->flags)) {
|
||||
bio_io_error(bio);
|
||||
} else if (unlikely((bio_op(bio) == REQ_OP_DISCARD) &&
|
||||
!blk_queue_discard(bdev_get_queue(bio->bi_bdev))))
|
||||
!blk_queue_discard(bio->bi_disk->queue)))
|
||||
/* Just ignore it */
|
||||
bio_endio(bio);
|
||||
else
|
||||
|
|
@ -1200,7 +1200,7 @@ static void raid10_read_request(struct mddev *mddev, struct bio *bio,
|
|||
|
||||
read_bio->bi_iter.bi_sector = r10_bio->devs[slot].addr +
|
||||
choose_data_offset(r10_bio, rdev);
|
||||
read_bio->bi_bdev = rdev->bdev;
|
||||
bio_set_dev(read_bio, rdev->bdev);
|
||||
read_bio->bi_end_io = raid10_end_read_request;
|
||||
bio_set_op_attrs(read_bio, op, do_sync);
|
||||
if (test_bit(FailFast, &rdev->flags) &&
|
||||
|
|
@ -1209,7 +1209,7 @@ static void raid10_read_request(struct mddev *mddev, struct bio *bio,
|
|||
read_bio->bi_private = r10_bio;
|
||||
|
||||
if (mddev->gendisk)
|
||||
trace_block_bio_remap(bdev_get_queue(read_bio->bi_bdev),
|
||||
trace_block_bio_remap(read_bio->bi_disk->queue,
|
||||
read_bio, disk_devt(mddev->gendisk),
|
||||
r10_bio->sector);
|
||||
generic_make_request(read_bio);
|
||||
|
|
@ -1249,7 +1249,7 @@ static void raid10_write_one_disk(struct mddev *mddev, struct r10bio *r10_bio,
|
|||
|
||||
mbio->bi_iter.bi_sector = (r10_bio->devs[n_copy].addr +
|
||||
choose_data_offset(r10_bio, rdev));
|
||||
mbio->bi_bdev = rdev->bdev;
|
||||
bio_set_dev(mbio, rdev->bdev);
|
||||
mbio->bi_end_io = raid10_end_write_request;
|
||||
bio_set_op_attrs(mbio, op, do_sync | do_fua);
|
||||
if (!replacement && test_bit(FailFast,
|
||||
|
|
@ -1259,11 +1259,11 @@ static void raid10_write_one_disk(struct mddev *mddev, struct r10bio *r10_bio,
|
|||
mbio->bi_private = r10_bio;
|
||||
|
||||
if (conf->mddev->gendisk)
|
||||
trace_block_bio_remap(bdev_get_queue(mbio->bi_bdev),
|
||||
trace_block_bio_remap(mbio->bi_disk->queue,
|
||||
mbio, disk_devt(conf->mddev->gendisk),
|
||||
r10_bio->sector);
|
||||
/* flush_pending_writes() needs access to the rdev so...*/
|
||||
mbio->bi_bdev = (void *)rdev;
|
||||
mbio->bi_disk = (void *)rdev;
|
||||
|
||||
atomic_inc(&r10_bio->remaining);
|
||||
|
||||
|
|
@ -2094,7 +2094,7 @@ static void sync_request_write(struct mddev *mddev, struct r10bio *r10_bio)
|
|||
if (test_bit(FailFast, &conf->mirrors[d].rdev->flags))
|
||||
tbio->bi_opf |= MD_FAILFAST;
|
||||
tbio->bi_iter.bi_sector += conf->mirrors[d].rdev->data_offset;
|
||||
tbio->bi_bdev = conf->mirrors[d].rdev->bdev;
|
||||
bio_set_dev(tbio, conf->mirrors[d].rdev->bdev);
|
||||
generic_make_request(tbio);
|
||||
}
|
||||
|
||||
|
|
@ -2552,7 +2552,7 @@ static int narrow_write_error(struct r10bio *r10_bio, int i)
|
|||
wsector = r10_bio->devs[i].addr + (sector - r10_bio->sector);
|
||||
wbio->bi_iter.bi_sector = wsector +
|
||||
choose_data_offset(r10_bio, rdev);
|
||||
wbio->bi_bdev = rdev->bdev;
|
||||
bio_set_dev(wbio, rdev->bdev);
|
||||
bio_set_op_attrs(wbio, REQ_OP_WRITE, 0);
|
||||
|
||||
if (submit_bio_wait(wbio) < 0)
|
||||
|
|
@ -2575,7 +2575,6 @@ static void handle_read_error(struct mddev *mddev, struct r10bio *r10_bio)
|
|||
struct bio *bio;
|
||||
struct r10conf *conf = mddev->private;
|
||||
struct md_rdev *rdev = r10_bio->devs[slot].rdev;
|
||||
dev_t bio_dev;
|
||||
sector_t bio_last_sector;
|
||||
|
||||
/* we got a read error. Maybe the drive is bad. Maybe just
|
||||
|
|
@ -2587,7 +2586,6 @@ static void handle_read_error(struct mddev *mddev, struct r10bio *r10_bio)
|
|||
* frozen.
|
||||
*/
|
||||
bio = r10_bio->devs[slot].bio;
|
||||
bio_dev = bio->bi_bdev->bd_dev;
|
||||
bio_last_sector = r10_bio->devs[slot].addr + rdev->data_offset + r10_bio->sectors;
|
||||
bio_put(bio);
|
||||
r10_bio->devs[slot].bio = NULL;
|
||||
|
|
@ -2950,7 +2948,7 @@ static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr,
|
|||
|
||||
/* Again, very different code for resync and recovery.
|
||||
* Both must result in an r10bio with a list of bios that
|
||||
* have bi_end_io, bi_sector, bi_bdev set,
|
||||
* have bi_end_io, bi_sector, bi_disk set,
|
||||
* and bi_private set to the r10bio.
|
||||
* For recovery, we may actually create several r10bios
|
||||
* with 2 bios in each, that correspond to the bios in the main one.
|
||||
|
|
@ -3095,7 +3093,7 @@ static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr,
|
|||
from_addr = r10_bio->devs[j].addr;
|
||||
bio->bi_iter.bi_sector = from_addr +
|
||||
rdev->data_offset;
|
||||
bio->bi_bdev = rdev->bdev;
|
||||
bio_set_dev(bio, rdev->bdev);
|
||||
atomic_inc(&rdev->nr_pending);
|
||||
/* and we write to 'i' (if not in_sync) */
|
||||
|
||||
|
|
@ -3117,7 +3115,7 @@ static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr,
|
|||
bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
|
||||
bio->bi_iter.bi_sector = to_addr
|
||||
+ mrdev->data_offset;
|
||||
bio->bi_bdev = mrdev->bdev;
|
||||
bio_set_dev(bio, mrdev->bdev);
|
||||
atomic_inc(&r10_bio->remaining);
|
||||
} else
|
||||
r10_bio->devs[1].bio->bi_end_io = NULL;
|
||||
|
|
@ -3143,7 +3141,7 @@ static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr,
|
|||
bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
|
||||
bio->bi_iter.bi_sector = to_addr +
|
||||
mreplace->data_offset;
|
||||
bio->bi_bdev = mreplace->bdev;
|
||||
bio_set_dev(bio, mreplace->bdev);
|
||||
atomic_inc(&r10_bio->remaining);
|
||||
break;
|
||||
}
|
||||
|
|
@ -3289,7 +3287,7 @@ static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr,
|
|||
if (test_bit(FailFast, &rdev->flags))
|
||||
bio->bi_opf |= MD_FAILFAST;
|
||||
bio->bi_iter.bi_sector = sector + rdev->data_offset;
|
||||
bio->bi_bdev = rdev->bdev;
|
||||
bio_set_dev(bio, rdev->bdev);
|
||||
count++;
|
||||
|
||||
rdev = rcu_dereference(conf->mirrors[d].replacement);
|
||||
|
|
@ -3311,7 +3309,7 @@ static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr,
|
|||
if (test_bit(FailFast, &rdev->flags))
|
||||
bio->bi_opf |= MD_FAILFAST;
|
||||
bio->bi_iter.bi_sector = sector + rdev->data_offset;
|
||||
bio->bi_bdev = rdev->bdev;
|
||||
bio_set_dev(bio, rdev->bdev);
|
||||
count++;
|
||||
rcu_read_unlock();
|
||||
}
|
||||
|
|
@ -3367,7 +3365,7 @@ static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr,
|
|||
r10_bio->sectors = nr_sectors;
|
||||
|
||||
if (bio->bi_end_io == end_sync_read) {
|
||||
md_sync_acct(bio->bi_bdev, nr_sectors);
|
||||
md_sync_acct_bio(bio, nr_sectors);
|
||||
bio->bi_status = 0;
|
||||
generic_make_request(bio);
|
||||
}
|
||||
|
|
@ -4383,7 +4381,7 @@ read_more:
|
|||
|
||||
read_bio = bio_alloc_mddev(GFP_KERNEL, RESYNC_PAGES, mddev);
|
||||
|
||||
read_bio->bi_bdev = rdev->bdev;
|
||||
bio_set_dev(read_bio, rdev->bdev);
|
||||
read_bio->bi_iter.bi_sector = (r10_bio->devs[r10_bio->read_slot].addr
|
||||
+ rdev->data_offset);
|
||||
read_bio->bi_private = r10_bio;
|
||||
|
|
@ -4417,7 +4415,7 @@ read_more:
|
|||
if (!rdev2 || test_bit(Faulty, &rdev2->flags))
|
||||
continue;
|
||||
|
||||
b->bi_bdev = rdev2->bdev;
|
||||
bio_set_dev(b, rdev2->bdev);
|
||||
b->bi_iter.bi_sector = r10_bio->devs[s/2].addr +
|
||||
rdev2->new_data_offset;
|
||||
b->bi_end_io = end_reshape_write;
|
||||
|
|
@ -4449,7 +4447,7 @@ read_more:
|
|||
r10_bio->sectors = nr_sectors;
|
||||
|
||||
/* Now submit the read */
|
||||
md_sync_acct(read_bio->bi_bdev, r10_bio->sectors);
|
||||
md_sync_acct_bio(read_bio, r10_bio->sectors);
|
||||
atomic_inc(&r10_bio->remaining);
|
||||
read_bio->bi_next = NULL;
|
||||
generic_make_request(read_bio);
|
||||
|
|
@ -4511,7 +4509,7 @@ static void reshape_request_write(struct mddev *mddev, struct r10bio *r10_bio)
|
|||
}
|
||||
atomic_inc(&rdev->nr_pending);
|
||||
rcu_read_unlock();
|
||||
md_sync_acct(b->bi_bdev, r10_bio->sectors);
|
||||
md_sync_acct_bio(b, r10_bio->sectors);
|
||||
atomic_inc(&r10_bio->remaining);
|
||||
b->bi_next = NULL;
|
||||
generic_make_request(b);
|
||||
|
|
|
|||
|
|
@ -745,7 +745,7 @@ static struct bio *r5l_bio_alloc(struct r5l_log *log)
|
|||
struct bio *bio = bio_alloc_bioset(GFP_NOIO, BIO_MAX_PAGES, log->bs);
|
||||
|
||||
bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
|
||||
bio->bi_bdev = log->rdev->bdev;
|
||||
bio_set_dev(bio, log->rdev->bdev);
|
||||
bio->bi_iter.bi_sector = log->rdev->data_offset + log->log_start;
|
||||
|
||||
return bio;
|
||||
|
|
@ -1313,7 +1313,7 @@ void r5l_flush_stripe_to_raid(struct r5l_log *log)
|
|||
if (!do_flush)
|
||||
return;
|
||||
bio_reset(&log->flush_bio);
|
||||
log->flush_bio.bi_bdev = log->rdev->bdev;
|
||||
bio_set_dev(&log->flush_bio, log->rdev->bdev);
|
||||
log->flush_bio.bi_end_io = r5l_log_flush_endio;
|
||||
log->flush_bio.bi_opf = REQ_OP_WRITE | REQ_PREFLUSH;
|
||||
submit_bio(&log->flush_bio);
|
||||
|
|
@ -1691,7 +1691,7 @@ static int r5l_recovery_fetch_ra_pool(struct r5l_log *log,
|
|||
sector_t offset)
|
||||
{
|
||||
bio_reset(ctx->ra_bio);
|
||||
ctx->ra_bio->bi_bdev = log->rdev->bdev;
|
||||
bio_set_dev(ctx->ra_bio, log->rdev->bdev);
|
||||
bio_set_op_attrs(ctx->ra_bio, REQ_OP_READ, 0);
|
||||
ctx->ra_bio->bi_iter.bi_sector = log->rdev->data_offset + offset;
|
||||
|
||||
|
|
|
|||
|
|
@ -415,7 +415,7 @@ static void ppl_submit_iounit_bio(struct ppl_io_unit *io, struct bio *bio)
|
|||
pr_debug("%s: seq: %llu size: %u sector: %llu dev: %s\n",
|
||||
__func__, io->seq, bio->bi_iter.bi_size,
|
||||
(unsigned long long)bio->bi_iter.bi_sector,
|
||||
bdevname(bio->bi_bdev, b));
|
||||
bio_devname(bio, b));
|
||||
|
||||
submit_bio(bio);
|
||||
}
|
||||
|
|
@ -453,7 +453,7 @@ static void ppl_submit_iounit(struct ppl_io_unit *io)
|
|||
|
||||
bio->bi_end_io = ppl_log_endio;
|
||||
bio->bi_opf = REQ_OP_WRITE | REQ_FUA;
|
||||
bio->bi_bdev = log->rdev->bdev;
|
||||
bio_set_dev(bio, log->rdev->bdev);
|
||||
bio->bi_iter.bi_sector = log->rdev->ppl.sector;
|
||||
bio_add_page(bio, io->header_page, PAGE_SIZE, 0);
|
||||
|
||||
|
|
@ -468,7 +468,7 @@ static void ppl_submit_iounit(struct ppl_io_unit *io)
|
|||
bio = bio_alloc_bioset(GFP_NOIO, BIO_MAX_PAGES,
|
||||
ppl_conf->bs);
|
||||
bio->bi_opf = prev->bi_opf;
|
||||
bio->bi_bdev = prev->bi_bdev;
|
||||
bio_copy_dev(bio, prev);
|
||||
bio->bi_iter.bi_sector = bio_end_sector(prev);
|
||||
bio_add_page(bio, sh->ppl_page, PAGE_SIZE, 0);
|
||||
|
||||
|
|
|
|||
|
|
@ -1096,7 +1096,7 @@ again:
|
|||
|
||||
set_bit(STRIPE_IO_STARTED, &sh->state);
|
||||
|
||||
bi->bi_bdev = rdev->bdev;
|
||||
bio_set_dev(bi, rdev->bdev);
|
||||
bio_set_op_attrs(bi, op, op_flags);
|
||||
bi->bi_end_io = op_is_write(op)
|
||||
? raid5_end_write_request
|
||||
|
|
@ -1145,7 +1145,7 @@ again:
|
|||
set_bit(R5_DOUBLE_LOCKED, &sh->dev[i].flags);
|
||||
|
||||
if (conf->mddev->gendisk)
|
||||
trace_block_bio_remap(bdev_get_queue(bi->bi_bdev),
|
||||
trace_block_bio_remap(bi->bi_disk->queue,
|
||||
bi, disk_devt(conf->mddev->gendisk),
|
||||
sh->dev[i].sector);
|
||||
if (should_defer && op_is_write(op))
|
||||
|
|
@ -1160,7 +1160,7 @@ again:
|
|||
|
||||
set_bit(STRIPE_IO_STARTED, &sh->state);
|
||||
|
||||
rbi->bi_bdev = rrdev->bdev;
|
||||
bio_set_dev(rbi, rrdev->bdev);
|
||||
bio_set_op_attrs(rbi, op, op_flags);
|
||||
BUG_ON(!op_is_write(op));
|
||||
rbi->bi_end_io = raid5_end_write_request;
|
||||
|
|
@ -1193,7 +1193,7 @@ again:
|
|||
if (op == REQ_OP_DISCARD)
|
||||
rbi->bi_vcnt = 0;
|
||||
if (conf->mddev->gendisk)
|
||||
trace_block_bio_remap(bdev_get_queue(rbi->bi_bdev),
|
||||
trace_block_bio_remap(rbi->bi_disk->queue,
|
||||
rbi, disk_devt(conf->mddev->gendisk),
|
||||
sh->dev[i].sector);
|
||||
if (should_defer && op_is_write(op))
|
||||
|
|
@ -5092,10 +5092,12 @@ static int raid5_congested(struct mddev *mddev, int bits)
|
|||
static int in_chunk_boundary(struct mddev *mddev, struct bio *bio)
|
||||
{
|
||||
struct r5conf *conf = mddev->private;
|
||||
sector_t sector = bio->bi_iter.bi_sector + get_start_sect(bio->bi_bdev);
|
||||
sector_t sector = bio->bi_iter.bi_sector;
|
||||
unsigned int chunk_sectors;
|
||||
unsigned int bio_sectors = bio_sectors(bio);
|
||||
|
||||
WARN_ON_ONCE(bio->bi_partno);
|
||||
|
||||
chunk_sectors = min(conf->chunk_sectors, conf->prev_chunk_sectors);
|
||||
return chunk_sectors >=
|
||||
((sector & (chunk_sectors - 1)) + bio_sectors);
|
||||
|
|
@ -5231,7 +5233,7 @@ static int raid5_read_one_chunk(struct mddev *mddev, struct bio *raid_bio)
|
|||
atomic_inc(&rdev->nr_pending);
|
||||
rcu_read_unlock();
|
||||
raid_bio->bi_next = (void*)rdev;
|
||||
align_bi->bi_bdev = rdev->bdev;
|
||||
bio_set_dev(align_bi, rdev->bdev);
|
||||
bio_clear_flag(align_bi, BIO_SEG_VALID);
|
||||
|
||||
if (is_badblock(rdev, align_bi->bi_iter.bi_sector,
|
||||
|
|
@ -5253,7 +5255,7 @@ static int raid5_read_one_chunk(struct mddev *mddev, struct bio *raid_bio)
|
|||
spin_unlock_irq(&conf->device_lock);
|
||||
|
||||
if (mddev->gendisk)
|
||||
trace_block_bio_remap(bdev_get_queue(align_bi->bi_bdev),
|
||||
trace_block_bio_remap(align_bi->bi_disk->queue,
|
||||
align_bi, disk_devt(mddev->gendisk),
|
||||
raid_bio->bi_iter.bi_sector);
|
||||
generic_make_request(align_bi);
|
||||
|
|
|
|||
Loading…
Reference in a new issue