block: don't free the integrity payload in bio_integrity_unmap_free_user
Now that the integrity payload is always freed in bio_uninit, don't bother freeing it a little earlier in bio_integrity_unmap_free_user. With that the separate bio_integrity_unmap_free_user can go away by just passing the bio to bio_integrity_unmap_user. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com> Reviewed-by: Kanchan Joshi <joshi.k@samsung.com> Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com> Link: https://lore.kernel.org/r/20240702151047.1746127-7-hch@lst.de Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
85253bac4d
commit
74cc150282
@ -131,34 +131,25 @@ static void bio_integrity_uncopy_user(struct bio_integrity_payload *bip)
|
|||||||
bio_integrity_unpin_bvec(copy, nr_vecs, true);
|
bio_integrity_unpin_bvec(copy, nr_vecs, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void bio_integrity_unmap_user(struct bio_integrity_payload *bip)
|
/**
|
||||||
|
* bio_integrity_unmap_user - Unmap user integrity payload
|
||||||
|
* @bio: bio containing bip to be unmapped
|
||||||
|
*
|
||||||
|
* Unmap the user mapped integrity portion of a bio.
|
||||||
|
*/
|
||||||
|
void bio_integrity_unmap_user(struct bio *bio)
|
||||||
{
|
{
|
||||||
bool dirty = bio_data_dir(bip->bip_bio) == READ;
|
struct bio_integrity_payload *bip = bio_integrity(bio);
|
||||||
|
|
||||||
if (bip->bip_flags & BIP_COPY_USER) {
|
if (bip->bip_flags & BIP_COPY_USER) {
|
||||||
if (dirty)
|
if (bio_data_dir(bio) == READ)
|
||||||
bio_integrity_uncopy_user(bip);
|
bio_integrity_uncopy_user(bip);
|
||||||
kfree(bvec_virt(bip->bip_vec));
|
kfree(bvec_virt(bip->bip_vec));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
bio_integrity_unpin_bvec(bip->bip_vec, bip->bip_max_vcnt, dirty);
|
bio_integrity_unpin_bvec(bip->bip_vec, bip->bip_max_vcnt,
|
||||||
}
|
bio_data_dir(bio) == READ);
|
||||||
|
|
||||||
/**
|
|
||||||
* bio_integrity_unmap_free_user - Unmap and free bio user integrity payload
|
|
||||||
* @bio: bio containing bip to be unmapped and freed
|
|
||||||
*
|
|
||||||
* Description: Used to unmap and free the user mapped integrity portion of a
|
|
||||||
* bio. Submitter attaching the user integrity buffer is responsible for
|
|
||||||
* unmapping and freeing it during completion.
|
|
||||||
*/
|
|
||||||
void bio_integrity_unmap_free_user(struct bio *bio)
|
|
||||||
{
|
|
||||||
struct bio_integrity_payload *bip = bio_integrity(bio);
|
|
||||||
|
|
||||||
bio_integrity_unmap_user(bip);
|
|
||||||
bio_integrity_free(bio);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -758,7 +758,7 @@ int blk_rq_unmap_user(struct bio *bio)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (bio_integrity(bio))
|
if (bio_integrity(bio))
|
||||||
bio_integrity_unmap_free_user(bio);
|
bio_integrity_unmap_user(bio);
|
||||||
|
|
||||||
next_bio = bio;
|
next_bio = bio;
|
||||||
bio = bio->bi_next;
|
bio = bio->bi_next;
|
||||||
|
@ -73,7 +73,7 @@ struct bio_integrity_payload *bio_integrity_alloc(struct bio *bio, gfp_t gfp,
|
|||||||
int bio_integrity_add_page(struct bio *bio, struct page *page, unsigned int len,
|
int bio_integrity_add_page(struct bio *bio, struct page *page, unsigned int len,
|
||||||
unsigned int offset);
|
unsigned int offset);
|
||||||
int bio_integrity_map_user(struct bio *bio, void __user *ubuf, ssize_t len, u32 seed);
|
int bio_integrity_map_user(struct bio *bio, void __user *ubuf, ssize_t len, u32 seed);
|
||||||
void bio_integrity_unmap_free_user(struct bio *bio);
|
void bio_integrity_unmap_user(struct bio *bio);
|
||||||
bool bio_integrity_prep(struct bio *bio);
|
bool bio_integrity_prep(struct bio *bio);
|
||||||
void bio_integrity_advance(struct bio *bio, unsigned int bytes_done);
|
void bio_integrity_advance(struct bio *bio, unsigned int bytes_done);
|
||||||
void bio_integrity_trim(struct bio *bio);
|
void bio_integrity_trim(struct bio *bio);
|
||||||
@ -104,7 +104,7 @@ static inline int bio_integrity_map_user(struct bio *bio, void __user *ubuf,
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void bio_integrity_unmap_free_user(struct bio *bio)
|
static inline void bio_integrity_unmap_user(struct bio *bio)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user