On 3/21/19 6:30 AM, Johannes Thumshirn wrote:
> With the introduction of BIO_ALLOCED we've used up all available bits in
> bio::bi_flags.
> 
> Make sure no-one adds a new one and thus overrides the BVEC_POOL_IDX

Two minor things:

> diff --git a/block/bio.c b/block/bio.c
> index 4db1008309ed..8c689aed46a0 100644
> --- a/block/bio.c
> +++ b/block/bio.c
> @@ -2126,12 +2126,20 @@ static void __init biovec_init_slabs(void)
>       }
>  }
>  
> +static inline void bio_flag_buildtime_check(void)
> +{
> +     BUILD_BUG_ON(BIO_FLAG_LAST > BVEC_POOL_OFFSET);
> +}
> +
>  static int __init init_bio(void)
>  {
>       bio_slab_max = 2;
>       bio_slab_nr = 0;
>       bio_slabs = kcalloc(bio_slab_max, sizeof(struct bio_slab),
>                           GFP_KERNEL);
> +
> +     bio_flag_buildtime_check();
> +

Just add the BUILD_BUG_ON() here, don't put it in a function.

> +enum {
> +     BIO_SEG_VALID = 1,              /* bi_phys_segments valid */
> +     BIO_CLONED = 2,                 /* doesn't own data */
> +     BIO_BOUNCED = 3,                /* bio is a bounce bio */
> +     BIO_USER_MAPPED = 4,            /* contains user pages */
> +     BIO_NULL_MAPPED = 5,            /* contains invalid user pages */
> +     BIO_QUIET = 6,                  /* Make BIO Quiet */
> +     BIO_CHAIN = 7,                  /* chained bio, ->bi_remaining in 
> effect */
> +     BIO_REFFED = 8,                 /* bio has elevated ->bi_cnt */
> +     BIO_THROTTLED = 9,              /* This bio has already been subjected 
> to
> +                                      * throttling rules. Don't do it again. 
> */
> +     BIO_TRACE_COMPLETION = 10,      /* bio_endio() should trace the final 
> completion
> +                                      * of this bio. */
> +     BIO_QUEUE_ENTERED = 11,         /* can use blk_queue_enter_live() */
> +     BIO_TRACKED = 12,               /* set if bio goes through the rq_qos 
> path */
> +     BIO_FLAG_LAST
> +};

Let's order this after the BIO_NO_PAGE_REF patch, so we can avoid
having to explicitly initialize the values.

You also haven't solved the issue of now having an extra bit, 2/2 uses
the last bit which the other patch already took...

-- 
Jens Axboe

Reply via email to