Commit dbde775c authored by NeilBrown's avatar NeilBrown Committed by Jens Axboe

block: simple improvements for bio->flags

The comment for the 'flags' field of 'bio' mentions
"command" which is no longer stored there, and doesn't
mention the bvec pool number, which is.

BIO_RESET_BITS is set in such a way that it would need to be
updated if new bits were added, which is easy to miss.

BVEC_POOL_BITS is larger than needed.  The BVEC_POOL_IDX()
ranges from 0 to 6, so 3 bits are sufficient.

This patch make improvements in each of these areas.
Signed-off-by: default avatarNeilBrown <neilb@suse.com>
Signed-off-by: default avatarJens Axboe <axboe@fb.com>
parent 1dd5198b
...@@ -33,7 +33,7 @@ struct bio { ...@@ -33,7 +33,7 @@ struct bio {
* top bits REQ_OP. Use * top bits REQ_OP. Use
* accessors. * accessors.
*/ */
unsigned short bi_flags; /* status, command, etc */ unsigned short bi_flags; /* status, etc and bvec pool number */
unsigned short bi_ioprio; unsigned short bi_ioprio;
struct bvec_iter bi_iter; struct bvec_iter bi_iter;
...@@ -110,12 +110,7 @@ struct bio { ...@@ -110,12 +110,7 @@ struct bio {
#define BIO_REFFED 8 /* bio has elevated ->bi_cnt */ #define BIO_REFFED 8 /* bio has elevated ->bi_cnt */
#define BIO_THROTTLED 9 /* This bio has already been subjected to #define BIO_THROTTLED 9 /* This bio has already been subjected to
* throttling rules. Don't do it again. */ * throttling rules. Don't do it again. */
/* See BVEC_POOL_OFFSET below before adding new flags */
/*
* Flags starting here get preserved by bio_reset() - this includes
* BVEC_POOL_IDX()
*/
#define BIO_RESET_BITS 10
/* /*
* We support 6 different bvec pools, the last one is magic in that it * We support 6 different bvec pools, the last one is magic in that it
...@@ -125,13 +120,22 @@ struct bio { ...@@ -125,13 +120,22 @@ struct bio {
#define BVEC_POOL_MAX (BVEC_POOL_NR - 1) #define BVEC_POOL_MAX (BVEC_POOL_NR - 1)
/* /*
* Top 4 bits of bio flags indicate the pool the bvecs came from. We add * Top 3 bits of bio flags indicate the pool the bvecs came from. We add
* 1 to the actual index so that 0 indicates that there are no bvecs to be * 1 to the actual index so that 0 indicates that there are no bvecs to be
* freed. * freed.
*/ */
#define BVEC_POOL_BITS (4) #define BVEC_POOL_BITS (3)
#define BVEC_POOL_OFFSET (16 - BVEC_POOL_BITS) #define BVEC_POOL_OFFSET (16 - BVEC_POOL_BITS)
#define BVEC_POOL_IDX(bio) ((bio)->bi_flags >> BVEC_POOL_OFFSET) #define BVEC_POOL_IDX(bio) ((bio)->bi_flags >> BVEC_POOL_OFFSET)
#if (1<< BVEC_POOL_BITS) < (BVEC_POOL_NR+1)
# error "BVEC_POOL_BITS is too small"
#endif
/*
* Flags starting here get preserved by bio_reset() - this includes
* only BVEC_POOL_IDX()
*/
#define BIO_RESET_BITS BVEC_POOL_OFFSET
/* /*
* Operations and flags common to the bio and request structures. * Operations and flags common to the bio and request structures.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment