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 &&
                        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) {