Merge tag 'dt-5.15' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc
[linux-2.6-microblaze.git] / block / bio-integrity.c
index 4b4eb89..6b47cdd 100644 (file)
@@ -104,8 +104,7 @@ void bio_integrity_free(struct bio *bio)
        struct bio_set *bs = bio->bi_pool;
 
        if (bip->bip_flags & BIP_BLOCK_INTEGRITY)
-               kfree(page_address(bip->bip_vec->bv_page) +
-                     bip->bip_vec->bv_offset);
+               kfree(bvec_virt(bip->bip_vec));
 
        __bio_integrity_free(bs, bip);
        bio->bi_integrity = NULL;
@@ -163,27 +162,23 @@ static blk_status_t bio_integrity_process(struct bio *bio,
        struct bio_vec bv;
        struct bio_integrity_payload *bip = bio_integrity(bio);
        blk_status_t ret = BLK_STS_OK;
-       void *prot_buf = page_address(bip->bip_vec->bv_page) +
-               bip->bip_vec->bv_offset;
 
        iter.disk_name = bio->bi_bdev->bd_disk->disk_name;
        iter.interval = 1 << bi->interval_exp;
        iter.seed = proc_iter->bi_sector;
-       iter.prot_buf = prot_buf;
+       iter.prot_buf = bvec_virt(bip->bip_vec);
 
        __bio_for_each_segment(bv, bio, bviter, *proc_iter) {
-               void *kaddr = kmap_atomic(bv.bv_page);
+               void *kaddr = bvec_kmap_local(&bv);
 
-               iter.data_buf = kaddr + bv.bv_offset;
+               iter.data_buf = kaddr;
                iter.data_size = bv.bv_len;
-
                ret = proc_fn(&iter);
-               if (ret) {
-                       kunmap_atomic(kaddr);
-                       return ret;
-               }
+               kunmap_local(kaddr);
+
+               if (ret)
+                       break;
 
-               kunmap_atomic(kaddr);
        }
        return ret;
 }