On Wed, Jan 21, 2026 at 07:43:10AM +0100, Christoph Hellwig wrote:
> Add a helper to set the seed and check flag based on useful defaults
> from the profile.
> 
> Note that this includes a small behavior change, as we ow only sets the

"...as we only set the seed if..." ?

> seed if any action is set, which is fine as nothing will look at it.
> 
> Signed-off-by: Christoph Hellwig <[email protected]>
> ---
>  block/bio-integrity-auto.c    | 14 ++------------
>  block/bio-integrity.c         | 16 ++++++++++++++++
>  include/linux/bio-integrity.h |  1 +
>  3 files changed, 19 insertions(+), 12 deletions(-)
> 
> diff --git a/block/bio-integrity-auto.c b/block/bio-integrity-auto.c
> index 3a4141a9de0c..5345d55b9998 100644
> --- a/block/bio-integrity-auto.c
> +++ b/block/bio-integrity-auto.c
> @@ -88,7 +88,6 @@ bool __bio_integrity_endio(struct bio *bio)
>   */
>  void bio_integrity_prep(struct bio *bio, unsigned int action)
>  {
> -     struct blk_integrity *bi = blk_get_integrity(bio->bi_bdev->bd_disk);
>       struct bio_integrity_data *bid;
>  
>       bid = mempool_alloc(&bid_pool, GFP_NOIO);
> @@ -96,17 +95,8 @@ void bio_integrity_prep(struct bio *bio, unsigned int 
> action)
>       bid->bio = bio;
>       bid->bip.bip_flags |= BIP_BLOCK_INTEGRITY;
>       bio_integrity_alloc_buf(bio, action & BI_ACT_ZERO);
> -
> -     bip_set_seed(&bid->bip, bio->bi_iter.bi_sector);
> -
> -     if (action & BI_ACT_CHECK) {
> -             if (bi->csum_type == BLK_INTEGRITY_CSUM_IP)
> -                     bid->bip.bip_flags |= BIP_IP_CHECKSUM;
> -             if (bi->csum_type)
> -                     bid->bip.bip_flags |= BIP_CHECK_GUARD;
> -             if (bi->flags & BLK_INTEGRITY_REF_TAG)
> -                     bid->bip.bip_flags |= BIP_CHECK_REFTAG;
> -     }
> +     if (action & BI_ACT_CHECK)
> +             bio_integrity_setup_default(bio);
>  
>       /* Auto-generate integrity metadata if this is a write */
>       if (bio_data_dir(bio) == WRITE && bip_should_check(&bid->bip))
> diff --git a/block/bio-integrity.c b/block/bio-integrity.c
> index 6bdbb4ed2d1a..0e8ebe84846e 100644
> --- a/block/bio-integrity.c
> +++ b/block/bio-integrity.c
> @@ -101,6 +101,22 @@ void bio_integrity_free_buf(struct bio_integrity_payload 
> *bip)
>               kfree(bvec_virt(bv));
>  }
>  
> +void bio_integrity_setup_default(struct bio *bio)
> +{
> +     struct blk_integrity *bi = blk_get_integrity(bio->bi_bdev->bd_disk);
> +     struct bio_integrity_payload *bip = bio_integrity(bio);
> +
> +     bip_set_seed(bip, bio->bi_iter.bi_sector);
> +
> +     if (bi->csum_type) {
> +             bip->bip_flags |= BIP_CHECK_GUARD;
> +             if (bi->csum_type == BLK_INTEGRITY_CSUM_IP)

/me wonders if this should be a switch, but it'd be a pretty lame one.

        switch (bi->csum_type) {
        case BLK_INTEGRITY_CSUM_NONE:
                break;
        case BLK_INTEGRITY_CSUM_IP:
                bip->bip_flags |= BIP_IP_CHECKSUM;
                fallthrough;
        case BLK_INTEGRITY_CSUM_CRC:
        case BLK_INTEGRITY_CSUM_CRC64:
                bip->bip_flags |= BIP_CHECK_GUARD;
                break;
        }

<shrug> I'll let you decide if you want slightly better typechecking.

With the commit message fixed,
Reviewed-by: "Darrick J. Wong" <[email protected]>

--D


> +                     bip->bip_flags |= BIP_IP_CHECKSUM;
> +     }
> +     if (bi->flags & BLK_INTEGRITY_REF_TAG)
> +             bip->bip_flags |= BIP_CHECK_REFTAG;
> +}
> +
>  /**
>   * bio_integrity_free - Free bio integrity payload
>   * @bio:     bio containing bip to be freed
> diff --git a/include/linux/bio-integrity.h b/include/linux/bio-integrity.h
> index 276cbbdd2c9d..232b86b9bbcb 100644
> --- a/include/linux/bio-integrity.h
> +++ b/include/linux/bio-integrity.h
> @@ -143,5 +143,6 @@ static inline int bio_integrity_add_page(struct bio *bio, 
> struct page *page,
>  
>  void bio_integrity_alloc_buf(struct bio *bio, bool zero_buffer);
>  void bio_integrity_free_buf(struct bio_integrity_payload *bip);
> +void bio_integrity_setup_default(struct bio *bio);
>  
>  #endif /* _LINUX_BIO_INTEGRITY_H */
> -- 
> 2.47.3
> 
> 

Reply via email to