block: move bio io prio to a new field
authorMike Christie <mchristi@redhat.com>
Sun, 5 Jun 2016 19:32:20 +0000 (14:32 -0500)
committerJens Axboe <axboe@fb.com>
Tue, 7 Jun 2016 19:41:38 +0000 (13:41 -0600)
In the next patch, we move drop the compat code and make
the op a separate value that is hidden in bi_rw. To give
the op and rq bits flags room to grow this moves prio to
its own field.

Signed-off-by: Mike Christie <mchristi@redhat.com>
Reviewed-by: Hannes Reinecke <hare@suse.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
include/linux/bio.h
include/linux/blk_types.h

index 4568647269a75ac205b6bccabb15dbbcf67ae2a2..35108c2f8ea965f4f88cd0ac149b4361b4a5039d 100644 (file)
 #define bio_op(bio)                            (op_from_rq_bits((bio)->bi_rw))
 #define bio_set_op_attrs(bio, op, flags)       ((bio)->bi_rw |= (op | flags))
 
-/*
- * upper 16 bits of bi_rw define the io priority of this bio
- */
-#define BIO_PRIO_SHIFT (8 * sizeof(unsigned long) - IOPRIO_BITS)
-#define bio_prio(bio)  ((bio)->bi_rw >> BIO_PRIO_SHIFT)
-#define bio_prio_valid(bio)    ioprio_valid(bio_prio(bio))
-
-#define bio_set_prio(bio, prio)                do {                    \
-       WARN_ON(prio >= (1 << IOPRIO_BITS));                    \
-       (bio)->bi_rw &= ((1UL << BIO_PRIO_SHIFT) - 1);          \
-       (bio)->bi_rw |= ((unsigned long) (prio) << BIO_PRIO_SHIFT);     \
-} while (0)
+#define bio_prio(bio)                  (bio)->bi_ioprio
+#define bio_set_prio(bio, prio)                ((bio)->bi_ioprio = prio)
 
 /*
  * various member access, note that bio_data should of course not be used
index 6e60baa583dabab7492d93ea0f356be04ca93713..27384134f8a09fc205715d71e554c383fae61628 100644 (file)
@@ -48,9 +48,8 @@ struct bio {
        struct block_device     *bi_bdev;
        unsigned int            bi_flags;       /* status, command, etc */
        int                     bi_error;
-       unsigned long           bi_rw;          /* bottom bits READ/WRITE,
-                                                * top bits priority
-                                                */
+       unsigned long           bi_rw;          /* READ/WRITE */
+       unsigned short          bi_ioprio;
 
        struct bvec_iter        bi_iter;