Previously, the bip's bi_size has been set before an integrity pages
were added. If a problem occurs in the process of adding pages for
bip, the bi_size mismatch problem must be dealt with.
When the page is successfully added to bvec, the bi_size is updated.
The parts affected by the change were also contained in this commit.
Cc: Christoph Hellwig <hch@lst.de>
Cc: Martin K. Petersen <martin.petersen@oracle.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jinyoung Choi <j-young.choi@samsung.com>
Tested-by: "Martin K. Petersen" <martin.petersen@oracle.com>
Reviewed-by: "Martin K. Petersen" <martin.petersen@oracle.com>
Link: https://lore.kernel.org/r/20230803024956epcms2p38186a17392706650c582d38ef3dbcd32@epcms2p3
Signed-off-by: Jens Axboe <axboe@kernel.dk>
 
 
        bvec_set_page(&bip->bip_vec[bip->bip_vcnt], page, len, offset);
        bip->bip_vcnt++;
+       bip->bip_iter.bi_size += len;
 
        return len;
 }
        }
 
        bip->bip_flags |= BIP_BLOCK_INTEGRITY;
-       bip->bip_iter.bi_size = len;
        bip_set_seed(bip, bio->bi_iter.bi_sector);
 
        if (bi->flags & BLK_INTEGRITY_IP_CHECKSUM)
 
 
        tag_len = io->cc->on_disk_tag_size * (bio_sectors(bio) >> io->cc->sector_shift);
 
-       bip->bip_iter.bi_size = tag_len;
        bip->bip_iter.bi_sector = io->cc->start + io->sector;
 
        ret = bio_integrity_add_page(bio, virt_to_page(io->integrity_metadata),
 
                goto out_free_meta;
        }
 
-       bip->bip_iter.bi_size = len;
        bip->bip_iter.bi_sector = seed;
        ret = bio_integrity_add_page(bio, virt_to_page(buf), len,
                        offset_in_page(buf));
 
                return PTR_ERR(bip);
        }
 
-       bip->bip_iter.bi_size = bio_integrity_bytes(bi, bio_sectors(bio));
        /* virtual start sector must be in integrity interval units */
        bip_set_seed(bip, bio->bi_iter.bi_sector >>
                     (bi->interval_exp - SECTOR_SHIFT));
 
-       resid = bip->bip_iter.bi_size;
+       resid = bio_integrity_bytes(bi, bio_sectors(bio));
        while (resid > 0 && sg_miter_next(miter)) {
                len = min_t(size_t, miter->length, resid);
                rc = bio_integrity_add_page(bio, miter->page, len,
 
                return PTR_ERR(bip);
        }
 
-       bip->bip_iter.bi_size = bio_integrity_bytes(bi, bio_sectors(bio));
        /* virtual start sector must be in integrity interval units */
        bip_set_seed(bip, bio->bi_iter.bi_sector >>
                                  (bi->interval_exp - SECTOR_SHIFT));
        pr_debug("IBLOCK BIP Size: %u Sector: %llu\n", bip->bip_iter.bi_size,
                 (unsigned long long)bip->bip_iter.bi_sector);
 
-       resid = bip->bip_iter.bi_size;
+       resid = bio_integrity_bytes(bi, bio_sectors(bio));
        while (resid > 0 && sg_miter_next(miter)) {
 
                len = min_t(size_t, miter->length, resid);