diff options
author | Peter Zijlstra <peterz@infradead.org> | 2020-07-08 11:38:59 +0200 |
---|---|---|
committer | Peter Zijlstra <peterz@infradead.org> | 2020-07-08 11:38:59 +0200 |
commit | faa2fd7cbad4609d06d7904c0a80cf2f8cd23678 (patch) | |
tree | 3a5bfcc8879b719aec97cb73ed6e020cde502546 /drivers/md/dm.c | |
parent | sched/core: Remove mmdrop() definition (diff) | |
parent | sched: Fix unreliable rseq cpu_id for new tasks (diff) | |
download | linux-faa2fd7cbad4609d06d7904c0a80cf2f8cd23678.tar.xz linux-faa2fd7cbad4609d06d7904c0a80cf2f8cd23678.zip |
Merge branch 'sched/urgent'
Diffstat (limited to 'drivers/md/dm.c')
-rw-r--r-- | drivers/md/dm.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/md/dm.c b/drivers/md/dm.c index 109e81f33edb..e6807792fec8 100644 --- a/drivers/md/dm.c +++ b/drivers/md/dm.c @@ -1009,6 +1009,7 @@ static void clone_endio(struct bio *bio) struct dm_io *io = tio->io; struct mapped_device *md = tio->io->md; dm_endio_fn endio = tio->ti->type->end_io; + struct bio *orig_bio = io->orig_bio; if (unlikely(error == BLK_STS_TARGET) && md->type != DM_TYPE_NVME_BIO_BASED) { if (bio_op(bio) == REQ_OP_DISCARD && @@ -1022,6 +1023,18 @@ static void clone_endio(struct bio *bio) disable_write_zeroes(md); } + /* + * For zone-append bios get offset in zone of the written + * sector and add that to the original bio sector pos. + */ + if (bio_op(orig_bio) == REQ_OP_ZONE_APPEND) { + sector_t written_sector = bio->bi_iter.bi_sector; + struct request_queue *q = orig_bio->bi_disk->queue; + u64 mask = (u64)blk_queue_zone_sectors(q) - 1; + + orig_bio->bi_iter.bi_sector += written_sector & mask; + } + if (endio) { int r = endio(tio->ti, bio, &error); switch (r) { |