|
@@ -93,11 +93,18 @@ struct bio {
|
|
|
#define bio_flags(bio) ((bio)->bi_opf & ((1 << BIO_OP_SHIFT) - 1))
|
|
|
#define bio_op(bio) ((bio)->bi_opf >> BIO_OP_SHIFT)
|
|
|
|
|
|
-#define bio_set_op_attrs(bio, op, op_flags) do { \
|
|
|
- WARN_ON(op >= (1 << REQ_OP_BITS)); \
|
|
|
- (bio)->bi_opf = bio_flags(bio); \
|
|
|
- (bio)->bi_opf |= ((unsigned int) (op) << BIO_OP_SHIFT); \
|
|
|
- (bio)->bi_opf |= op_flags; \
|
|
|
+#define bio_set_op_attrs(bio, op, op_flags) do { \
|
|
|
+ if (__builtin_constant_p(op)) \
|
|
|
+ BUILD_BUG_ON((op) + 0U >= (1U << REQ_OP_BITS)); \
|
|
|
+ else \
|
|
|
+ WARN_ON_ONCE((op) + 0U >= (1U << REQ_OP_BITS)); \
|
|
|
+ if (__builtin_constant_p(op_flags)) \
|
|
|
+ BUILD_BUG_ON((op_flags) + 0U >= (1U << BIO_OP_SHIFT)); \
|
|
|
+ else \
|
|
|
+ WARN_ON_ONCE((op_flags) + 0U >= (1U << BIO_OP_SHIFT)); \
|
|
|
+ (bio)->bi_opf = bio_flags(bio); \
|
|
|
+ (bio)->bi_opf |= (((op) + 0U) << BIO_OP_SHIFT); \
|
|
|
+ (bio)->bi_opf |= (op_flags); \
|
|
|
} while (0)
|
|
|
|
|
|
#define BIO_RESET_BYTES offsetof(struct bio, bi_max_vecs)
|