diff options
Diffstat (limited to 'include/linux/blkdev.h')
-rw-r--r-- | include/linux/blkdev.h | 49 |
1 files changed, 48 insertions, 1 deletions
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 90097dd8b8ed..b4415feac679 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
@@ -78,6 +78,50 @@ enum rq_cmd_type_bits { | |||
78 | REQ_TYPE_DRV_PRIV, /* driver defined types from here */ | 78 | REQ_TYPE_DRV_PRIV, /* driver defined types from here */ |
79 | }; | 79 | }; |
80 | 80 | ||
81 | /* | ||
82 | * request flags */ | ||
83 | typedef __u32 __bitwise req_flags_t; | ||
84 | |||
85 | /* elevator knows about this request */ | ||
86 | #define RQF_SORTED ((__force req_flags_t)(1 << 0)) | ||
87 | /* drive already may have started this one */ | ||
88 | #define RQF_STARTED ((__force req_flags_t)(1 << 1)) | ||
89 | /* uses tagged queueing */ | ||
90 | #define RQF_QUEUED ((__force req_flags_t)(1 << 2)) | ||
91 | /* may not be passed by ioscheduler */ | ||
92 | #define RQF_SOFTBARRIER ((__force req_flags_t)(1 << 3)) | ||
93 | /* request for flush sequence */ | ||
94 | #define RQF_FLUSH_SEQ ((__force req_flags_t)(1 << 4)) | ||
95 | /* merge of different types, fail separately */ | ||
96 | #define RQF_MIXED_MERGE ((__force req_flags_t)(1 << 5)) | ||
97 | /* track inflight for MQ */ | ||
98 | #define RQF_MQ_INFLIGHT ((__force req_flags_t)(1 << 6)) | ||
99 | /* don't call prep for this one */ | ||
100 | #define RQF_DONTPREP ((__force req_flags_t)(1 << 7)) | ||
101 | /* set for "ide_preempt" requests and also for requests for which the SCSI | ||
102 | "quiesce" state must be ignored. */ | ||
103 | #define RQF_PREEMPT ((__force req_flags_t)(1 << 8)) | ||
104 | /* contains copies of user pages */ | ||
105 | #define RQF_COPY_USER ((__force req_flags_t)(1 << 9)) | ||
106 | /* vaguely specified driver internal error. Ignored by the block layer */ | ||
107 | #define RQF_FAILED ((__force req_flags_t)(1 << 10)) | ||
108 | /* don't warn about errors */ | ||
109 | #define RQF_QUIET ((__force req_flags_t)(1 << 11)) | ||
110 | /* elevator private data attached */ | ||
111 | #define RQF_ELVPRIV ((__force req_flags_t)(1 << 12)) | ||
112 | /* account I/O stat */ | ||
113 | #define RQF_IO_STAT ((__force req_flags_t)(1 << 13)) | ||
114 | /* request came from our alloc pool */ | ||
115 | #define RQF_ALLOCED ((__force req_flags_t)(1 << 14)) | ||
116 | /* runtime pm request */ | ||
117 | #define RQF_PM ((__force req_flags_t)(1 << 15)) | ||
118 | /* on IO scheduler merge hash */ | ||
119 | #define RQF_HASHED ((__force req_flags_t)(1 << 16)) | ||
120 | |||
121 | /* flags that prevent us from merging requests: */ | ||
122 | #define RQF_NOMERGE_FLAGS \ | ||
123 | (RQF_STARTED | RQF_SOFTBARRIER | RQF_FLUSH_SEQ) | ||
124 | |||
81 | #define BLK_MAX_CDB 16 | 125 | #define BLK_MAX_CDB 16 |
82 | 126 | ||
83 | /* | 127 | /* |
@@ -99,6 +143,7 @@ struct request { | |||
99 | int cpu; | 143 | int cpu; |
100 | unsigned cmd_type; | 144 | unsigned cmd_type; |
101 | u64 cmd_flags; | 145 | u64 cmd_flags; |
146 | req_flags_t rq_flags; | ||
102 | unsigned long atomic_flags; | 147 | unsigned long atomic_flags; |
103 | 148 | ||
104 | /* the following two fields are internal, NEVER access directly */ | 149 | /* the following two fields are internal, NEVER access directly */ |
@@ -648,7 +693,7 @@ static inline void queue_flag_clear(unsigned int flag, struct request_queue *q) | |||
648 | REQ_FAILFAST_DRIVER)) | 693 | REQ_FAILFAST_DRIVER)) |
649 | 694 | ||
650 | #define blk_account_rq(rq) \ | 695 | #define blk_account_rq(rq) \ |
651 | (((rq)->cmd_flags & REQ_STARTED) && \ | 696 | (((rq)->rq_flags & RQF_STARTED) && \ |
652 | ((rq)->cmd_type == REQ_TYPE_FS)) | 697 | ((rq)->cmd_type == REQ_TYPE_FS)) |
653 | 698 | ||
654 | #define blk_rq_cpu_valid(rq) ((rq)->cpu != -1) | 699 | #define blk_rq_cpu_valid(rq) ((rq)->cpu != -1) |
@@ -740,6 +785,8 @@ static inline bool rq_mergeable(struct request *rq) | |||
740 | 785 | ||
741 | if (rq->cmd_flags & REQ_NOMERGE_FLAGS) | 786 | if (rq->cmd_flags & REQ_NOMERGE_FLAGS) |
742 | return false; | 787 | return false; |
788 | if (rq->rq_flags & RQF_NOMERGE_FLAGS) | ||
789 | return false; | ||
743 | 790 | ||
744 | return true; | 791 | return true; |
745 | } | 792 | } |