LCOV - code coverage report
Current view: top level - include/linux - blk_types.h (source / functions) Hit Total Coverage
Test: Real Lines: 14 18 77.8 %
Date: 2020-10-17 15:46:16 Functions: 0 1 0.0 %
Legend: Neither, QEMU, Real, Both Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : /* SPDX-License-Identifier: GPL-2.0 */
       2                 :            : /*
       3                 :            :  * Block data types and constants.  Directly include this file only to
       4                 :            :  * break include dependency loop.
       5                 :            :  */
       6                 :            : #ifndef __LINUX_BLK_TYPES_H
       7                 :            : #define __LINUX_BLK_TYPES_H
       8                 :            : 
       9                 :            : #include <linux/types.h>
      10                 :            : #include <linux/bvec.h>
      11                 :            : #include <linux/ktime.h>
      12                 :            : 
      13                 :            : struct bio_set;
      14                 :            : struct bio;
      15                 :            : struct bio_integrity_payload;
      16                 :            : struct page;
      17                 :            : struct block_device;
      18                 :            : struct io_context;
      19                 :            : struct cgroup_subsys_state;
      20                 :            : typedef void (bio_end_io_t) (struct bio *);
      21                 :            : 
      22                 :            : /*
      23                 :            :  * Block error status values.  See block/blk-core:blk_errors for the details.
      24                 :            :  * Alpha cannot write a byte atomically, so we need to use 32-bit value.
      25                 :            :  */
      26                 :            : #if defined(CONFIG_ALPHA) && !defined(__alpha_bwx__)
      27                 :            : typedef u32 __bitwise blk_status_t;
      28                 :            : #else
      29                 :            : typedef u8 __bitwise blk_status_t;
      30                 :            : #endif
      31                 :            : #define BLK_STS_OK 0
      32                 :            : #define BLK_STS_NOTSUPP         ((__force blk_status_t)1)
      33                 :            : #define BLK_STS_TIMEOUT         ((__force blk_status_t)2)
      34                 :            : #define BLK_STS_NOSPC           ((__force blk_status_t)3)
      35                 :            : #define BLK_STS_TRANSPORT       ((__force blk_status_t)4)
      36                 :            : #define BLK_STS_TARGET          ((__force blk_status_t)5)
      37                 :            : #define BLK_STS_NEXUS           ((__force blk_status_t)6)
      38                 :            : #define BLK_STS_MEDIUM          ((__force blk_status_t)7)
      39                 :            : #define BLK_STS_PROTECTION      ((__force blk_status_t)8)
      40                 :            : #define BLK_STS_RESOURCE        ((__force blk_status_t)9)
      41                 :            : #define BLK_STS_IOERR           ((__force blk_status_t)10)
      42                 :            : 
      43                 :            : /* hack for device mapper, don't use elsewhere: */
      44                 :            : #define BLK_STS_DM_REQUEUE    ((__force blk_status_t)11)
      45                 :            : 
      46                 :            : #define BLK_STS_AGAIN           ((__force blk_status_t)12)
      47                 :            : 
      48                 :            : /*
      49                 :            :  * BLK_STS_DEV_RESOURCE is returned from the driver to the block layer if
      50                 :            :  * device related resources are unavailable, but the driver can guarantee
      51                 :            :  * that the queue will be rerun in the future once resources become
      52                 :            :  * available again. This is typically the case for device specific
      53                 :            :  * resources that are consumed for IO. If the driver fails allocating these
      54                 :            :  * resources, we know that inflight (or pending) IO will free these
      55                 :            :  * resource upon completion.
      56                 :            :  *
      57                 :            :  * This is different from BLK_STS_RESOURCE in that it explicitly references
      58                 :            :  * a device specific resource. For resources of wider scope, allocation
      59                 :            :  * failure can happen without having pending IO. This means that we can't
      60                 :            :  * rely on request completions freeing these resources, as IO may not be in
      61                 :            :  * flight. Examples of that are kernel memory allocations, DMA mappings, or
      62                 :            :  * any other system wide resources.
      63                 :            :  */
      64                 :            : #define BLK_STS_DEV_RESOURCE    ((__force blk_status_t)13)
      65                 :            : 
      66                 :            : /**
      67                 :            :  * blk_path_error - returns true if error may be path related
      68                 :            :  * @error: status the request was completed with
      69                 :            :  *
      70                 :            :  * Description:
      71                 :            :  *     This classifies block error status into non-retryable errors and ones
      72                 :            :  *     that may be successful if retried on a failover path.
      73                 :            :  *
      74                 :            :  * Return:
      75                 :            :  *     %false - retrying failover path will not help
      76                 :            :  *     %true  - may succeed if retried
      77                 :            :  */
      78                 :            : static inline bool blk_path_error(blk_status_t error)
      79                 :            : {
      80                 :            :         switch (error) {
      81                 :            :         case BLK_STS_NOTSUPP:
      82                 :            :         case BLK_STS_NOSPC:
      83                 :            :         case BLK_STS_TARGET:
      84                 :            :         case BLK_STS_NEXUS:
      85                 :            :         case BLK_STS_MEDIUM:
      86                 :            :         case BLK_STS_PROTECTION:
      87                 :            :                 return false;
      88                 :            :         }
      89                 :            : 
      90                 :            :         /* Anything else could be a path failure, so should be retried */
      91                 :            :         return true;
      92                 :            : }
      93                 :            : 
      94                 :            : /*
      95                 :            :  * From most significant bit:
      96                 :            :  * 1 bit: reserved for other usage, see below
      97                 :            :  * 12 bits: original size of bio
      98                 :            :  * 51 bits: issue time of bio
      99                 :            :  */
     100                 :            : #define BIO_ISSUE_RES_BITS      1
     101                 :            : #define BIO_ISSUE_SIZE_BITS     12
     102                 :            : #define BIO_ISSUE_RES_SHIFT     (64 - BIO_ISSUE_RES_BITS)
     103                 :            : #define BIO_ISSUE_SIZE_SHIFT    (BIO_ISSUE_RES_SHIFT - BIO_ISSUE_SIZE_BITS)
     104                 :            : #define BIO_ISSUE_TIME_MASK     ((1ULL << BIO_ISSUE_SIZE_SHIFT) - 1)
     105                 :            : #define BIO_ISSUE_SIZE_MASK     \
     106                 :            :         (((1ULL << BIO_ISSUE_SIZE_BITS) - 1) << BIO_ISSUE_SIZE_SHIFT)
     107                 :            : #define BIO_ISSUE_RES_MASK      (~((1ULL << BIO_ISSUE_RES_SHIFT) - 1))
     108                 :            : 
     109                 :            : /* Reserved bit for blk-throtl */
     110                 :            : #define BIO_ISSUE_THROTL_SKIP_LATENCY (1ULL << 63)
     111                 :            : 
     112                 :            : struct bio_issue {
     113                 :            :         u64 value;
     114                 :            : };
     115                 :            : 
     116                 :            : static inline u64 __bio_issue_time(u64 time)
     117                 :            : {
     118                 :            :         return time & BIO_ISSUE_TIME_MASK;
     119                 :            : }
     120                 :            : 
     121                 :            : static inline u64 bio_issue_time(struct bio_issue *issue)
     122                 :            : {
     123                 :            :         return __bio_issue_time(issue->value);
     124                 :            : }
     125                 :            : 
     126                 :            : static inline sector_t bio_issue_size(struct bio_issue *issue)
     127                 :            : {
     128                 :            :         return ((issue->value & BIO_ISSUE_SIZE_MASK) >> BIO_ISSUE_SIZE_SHIFT);
     129                 :            : }
     130                 :            : 
     131                 :          3 : static inline void bio_issue_init(struct bio_issue *issue,
     132                 :            :                                        sector_t size)
     133                 :            : {
     134                 :          3 :         size &= (1ULL << BIO_ISSUE_SIZE_BITS) - 1;
     135                 :          3 :         issue->value = ((issue->value & BIO_ISSUE_RES_MASK) |
     136                 :          3 :                         (ktime_get_ns() & BIO_ISSUE_TIME_MASK) |
     137                 :          3 :                         ((u64)size << BIO_ISSUE_SIZE_SHIFT));
     138                 :          3 : }
     139                 :            : 
     140                 :            : /*
     141                 :            :  * main unit of I/O for the block layer and lower layers (ie drivers and
     142                 :            :  * stacking drivers)
     143                 :            :  */
     144                 :            : struct bio {
     145                 :            :         struct bio              *bi_next;       /* request queue link */
     146                 :            :         struct gendisk          *bi_disk;
     147                 :            :         unsigned int            bi_opf;         /* bottom bits req flags,
     148                 :            :                                                  * top bits REQ_OP. Use
     149                 :            :                                                  * accessors.
     150                 :            :                                                  */
     151                 :            :         unsigned short          bi_flags;       /* status, etc and bvec pool number */
     152                 :            :         unsigned short          bi_ioprio;
     153                 :            :         unsigned short          bi_write_hint;
     154                 :            :         blk_status_t            bi_status;
     155                 :            :         u8                      bi_partno;
     156                 :            : 
     157                 :            :         struct bvec_iter        bi_iter;
     158                 :            : 
     159                 :            :         atomic_t                __bi_remaining;
     160                 :            :         bio_end_io_t            *bi_end_io;
     161                 :            : 
     162                 :            :         void                    *bi_private;
     163                 :            : #ifdef CONFIG_BLK_CGROUP
     164                 :            :         /*
     165                 :            :          * Represents the association of the css and request_queue for the bio.
     166                 :            :          * If a bio goes direct to device, it will not have a blkg as it will
     167                 :            :          * not have a request_queue associated with it.  The reference is put
     168                 :            :          * on release of the bio.
     169                 :            :          */
     170                 :            :         struct blkcg_gq         *bi_blkg;
     171                 :            :         struct bio_issue        bi_issue;
     172                 :            : #ifdef CONFIG_BLK_CGROUP_IOCOST
     173                 :            :         u64                     bi_iocost_cost;
     174                 :            : #endif
     175                 :            : #endif
     176                 :            :         union {
     177                 :            : #if defined(CONFIG_BLK_DEV_INTEGRITY)
     178                 :            :                 struct bio_integrity_payload *bi_integrity; /* data integrity */
     179                 :            : #endif
     180                 :            :         };
     181                 :            : 
     182                 :            :         unsigned short          bi_vcnt;        /* how many bio_vec's */
     183                 :            : 
     184                 :            :         /*
     185                 :            :          * Everything starting with bi_max_vecs will be preserved by bio_reset()
     186                 :            :          */
     187                 :            : 
     188                 :            :         unsigned short          bi_max_vecs;    /* max bvl_vecs we can hold */
     189                 :            : 
     190                 :            :         atomic_t                __bi_cnt;       /* pin count */
     191                 :            : 
     192                 :            :         struct bio_vec          *bi_io_vec;     /* the actual vec list */
     193                 :            : 
     194                 :            :         struct bio_set          *bi_pool;
     195                 :            : 
     196                 :            :         /*
     197                 :            :          * We can inline a number of vecs at the end of the bio, to avoid
     198                 :            :          * double allocations for a small number of bio_vecs. This member
     199                 :            :          * MUST obviously be kept at the very end of the bio.
     200                 :            :          */
     201                 :            :         struct bio_vec          bi_inline_vecs[0];
     202                 :            : };
     203                 :            : 
     204                 :            : #define BIO_RESET_BYTES         offsetof(struct bio, bi_max_vecs)
     205                 :            : 
     206                 :            : /*
     207                 :            :  * bio flags
     208                 :            :  */
     209                 :            : enum {
     210                 :            :         BIO_NO_PAGE_REF,        /* don't put release vec pages */
     211                 :            :         BIO_CLONED,             /* doesn't own data */
     212                 :            :         BIO_BOUNCED,            /* bio is a bounce bio */
     213                 :            :         BIO_USER_MAPPED,        /* contains user pages */
     214                 :            :         BIO_NULL_MAPPED,        /* contains invalid user pages */
     215                 :            :         BIO_WORKINGSET,         /* contains userspace workingset pages */
     216                 :            :         BIO_QUIET,              /* Make BIO Quiet */
     217                 :            :         BIO_CHAIN,              /* chained bio, ->bi_remaining in effect */
     218                 :            :         BIO_REFFED,             /* bio has elevated ->bi_cnt */
     219                 :            :         BIO_THROTTLED,          /* This bio has already been subjected to
     220                 :            :                                  * throttling rules. Don't do it again. */
     221                 :            :         BIO_TRACE_COMPLETION,   /* bio_endio() should trace the final completion
     222                 :            :                                  * of this bio. */
     223                 :            :         BIO_QUEUE_ENTERED,      /* can use blk_queue_enter_live() */
     224                 :            :         BIO_TRACKED,            /* set if bio goes through the rq_qos path */
     225                 :            :         BIO_FLAG_LAST
     226                 :            : };
     227                 :            : 
     228                 :            : /* See BVEC_POOL_OFFSET below before adding new flags */
     229                 :            : 
     230                 :            : /*
     231                 :            :  * We support 6 different bvec pools, the last one is magic in that it
     232                 :            :  * is backed by a mempool.
     233                 :            :  */
     234                 :            : #define BVEC_POOL_NR            6
     235                 :            : #define BVEC_POOL_MAX           (BVEC_POOL_NR - 1)
     236                 :            : 
     237                 :            : /*
     238                 :            :  * Top 3 bits of bio flags indicate the pool the bvecs came from.  We add
     239                 :            :  * 1 to the actual index so that 0 indicates that there are no bvecs to be
     240                 :            :  * freed.
     241                 :            :  */
     242                 :            : #define BVEC_POOL_BITS          (3)
     243                 :            : #define BVEC_POOL_OFFSET        (16 - BVEC_POOL_BITS)
     244                 :            : #define BVEC_POOL_IDX(bio)      ((bio)->bi_flags >> BVEC_POOL_OFFSET)
     245                 :            : #if (1<< BVEC_POOL_BITS) < (BVEC_POOL_NR+1)
     246                 :            : # error "BVEC_POOL_BITS is too small"
     247                 :            : #endif
     248                 :            : 
     249                 :            : /*
     250                 :            :  * Flags starting here get preserved by bio_reset() - this includes
     251                 :            :  * only BVEC_POOL_IDX()
     252                 :            :  */
     253                 :            : #define BIO_RESET_BITS  BVEC_POOL_OFFSET
     254                 :            : 
     255                 :            : typedef __u32 __bitwise blk_mq_req_flags_t;
     256                 :            : 
     257                 :            : /*
     258                 :            :  * Operations and flags common to the bio and request structures.
     259                 :            :  * We use 8 bits for encoding the operation, and the remaining 24 for flags.
     260                 :            :  *
     261                 :            :  * The least significant bit of the operation number indicates the data
     262                 :            :  * transfer direction:
     263                 :            :  *
     264                 :            :  *   - if the least significant bit is set transfers are TO the device
     265                 :            :  *   - if the least significant bit is not set transfers are FROM the device
     266                 :            :  *
     267                 :            :  * If a operation does not transfer data the least significant bit has no
     268                 :            :  * meaning.
     269                 :            :  */
     270                 :            : #define REQ_OP_BITS     8
     271                 :            : #define REQ_OP_MASK     ((1 << REQ_OP_BITS) - 1)
     272                 :            : #define REQ_FLAG_BITS   24
     273                 :            : 
     274                 :            : enum req_opf {
     275                 :            :         /* read sectors from the device */
     276                 :            :         REQ_OP_READ             = 0,
     277                 :            :         /* write sectors to the device */
     278                 :            :         REQ_OP_WRITE            = 1,
     279                 :            :         /* flush the volatile write cache */
     280                 :            :         REQ_OP_FLUSH            = 2,
     281                 :            :         /* discard sectors */
     282                 :            :         REQ_OP_DISCARD          = 3,
     283                 :            :         /* securely erase sectors */
     284                 :            :         REQ_OP_SECURE_ERASE     = 5,
     285                 :            :         /* reset a zone write pointer */
     286                 :            :         REQ_OP_ZONE_RESET       = 6,
     287                 :            :         /* write the same sector many times */
     288                 :            :         REQ_OP_WRITE_SAME       = 7,
     289                 :            :         /* reset all the zone present on the device */
     290                 :            :         REQ_OP_ZONE_RESET_ALL   = 8,
     291                 :            :         /* write the zero filled sector many times */
     292                 :            :         REQ_OP_WRITE_ZEROES     = 9,
     293                 :            : 
     294                 :            :         /* SCSI passthrough using struct scsi_request */
     295                 :            :         REQ_OP_SCSI_IN          = 32,
     296                 :            :         REQ_OP_SCSI_OUT         = 33,
     297                 :            :         /* Driver private requests */
     298                 :            :         REQ_OP_DRV_IN           = 34,
     299                 :            :         REQ_OP_DRV_OUT          = 35,
     300                 :            : 
     301                 :            :         REQ_OP_LAST,
     302                 :            : };
     303                 :            : 
     304                 :            : enum req_flag_bits {
     305                 :            :         __REQ_FAILFAST_DEV =    /* no driver retries of device errors */
     306                 :            :                 REQ_OP_BITS,
     307                 :            :         __REQ_FAILFAST_TRANSPORT, /* no driver retries of transport errors */
     308                 :            :         __REQ_FAILFAST_DRIVER,  /* no driver retries of driver errors */
     309                 :            :         __REQ_SYNC,             /* request is sync (sync write or read) */
     310                 :            :         __REQ_META,             /* metadata io request */
     311                 :            :         __REQ_PRIO,             /* boost priority in cfq */
     312                 :            :         __REQ_NOMERGE,          /* don't touch this for merging */
     313                 :            :         __REQ_IDLE,             /* anticipate more IO after this one */
     314                 :            :         __REQ_INTEGRITY,        /* I/O includes block integrity payload */
     315                 :            :         __REQ_FUA,              /* forced unit access */
     316                 :            :         __REQ_PREFLUSH,         /* request for cache flush */
     317                 :            :         __REQ_RAHEAD,           /* read ahead, can fail anytime */
     318                 :            :         __REQ_BACKGROUND,       /* background IO */
     319                 :            :         __REQ_NOWAIT,           /* Don't wait if request will block */
     320                 :            :         __REQ_NOWAIT_INLINE,    /* Return would-block error inline */
     321                 :            :         /*
     322                 :            :          * When a shared kthread needs to issue a bio for a cgroup, doing
     323                 :            :          * so synchronously can lead to priority inversions as the kthread
     324                 :            :          * can be trapped waiting for that cgroup.  CGROUP_PUNT flag makes
     325                 :            :          * submit_bio() punt the actual issuing to a dedicated per-blkcg
     326                 :            :          * work item to avoid such priority inversions.
     327                 :            :          */
     328                 :            :         __REQ_CGROUP_PUNT,
     329                 :            : 
     330                 :            :         /* command specific flags for REQ_OP_WRITE_ZEROES: */
     331                 :            :         __REQ_NOUNMAP,          /* do not free blocks when zeroing */
     332                 :            : 
     333                 :            :         __REQ_HIPRI,
     334                 :            : 
     335                 :            :         /* for driver use */
     336                 :            :         __REQ_DRV,
     337                 :            :         __REQ_SWAP,             /* swapping request. */
     338                 :            :         __REQ_NR_BITS,          /* stops here */
     339                 :            : };
     340                 :            : 
     341                 :            : #define REQ_FAILFAST_DEV        (1ULL << __REQ_FAILFAST_DEV)
     342                 :            : #define REQ_FAILFAST_TRANSPORT  (1ULL << __REQ_FAILFAST_TRANSPORT)
     343                 :            : #define REQ_FAILFAST_DRIVER     (1ULL << __REQ_FAILFAST_DRIVER)
     344                 :            : #define REQ_SYNC                (1ULL << __REQ_SYNC)
     345                 :            : #define REQ_META                (1ULL << __REQ_META)
     346                 :            : #define REQ_PRIO                (1ULL << __REQ_PRIO)
     347                 :            : #define REQ_NOMERGE             (1ULL << __REQ_NOMERGE)
     348                 :            : #define REQ_IDLE                (1ULL << __REQ_IDLE)
     349                 :            : #define REQ_INTEGRITY           (1ULL << __REQ_INTEGRITY)
     350                 :            : #define REQ_FUA                 (1ULL << __REQ_FUA)
     351                 :            : #define REQ_PREFLUSH            (1ULL << __REQ_PREFLUSH)
     352                 :            : #define REQ_RAHEAD              (1ULL << __REQ_RAHEAD)
     353                 :            : #define REQ_BACKGROUND          (1ULL << __REQ_BACKGROUND)
     354                 :            : #define REQ_NOWAIT              (1ULL << __REQ_NOWAIT)
     355                 :            : #define REQ_NOWAIT_INLINE       (1ULL << __REQ_NOWAIT_INLINE)
     356                 :            : #define REQ_CGROUP_PUNT         (1ULL << __REQ_CGROUP_PUNT)
     357                 :            : 
     358                 :            : #define REQ_NOUNMAP             (1ULL << __REQ_NOUNMAP)
     359                 :            : #define REQ_HIPRI               (1ULL << __REQ_HIPRI)
     360                 :            : 
     361                 :            : #define REQ_DRV                 (1ULL << __REQ_DRV)
     362                 :            : #define REQ_SWAP                (1ULL << __REQ_SWAP)
     363                 :            : 
     364                 :            : #define REQ_FAILFAST_MASK \
     365                 :            :         (REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT | REQ_FAILFAST_DRIVER)
     366                 :            : 
     367                 :            : #define REQ_NOMERGE_FLAGS \
     368                 :            :         (REQ_NOMERGE | REQ_PREFLUSH | REQ_FUA)
     369                 :            : 
     370                 :            : enum stat_group {
     371                 :            :         STAT_READ,
     372                 :            :         STAT_WRITE,
     373                 :            :         STAT_DISCARD,
     374                 :            : 
     375                 :            :         NR_STAT_GROUPS
     376                 :            : };
     377                 :            : 
     378                 :            : #define bio_op(bio) \
     379                 :            :         ((bio)->bi_opf & REQ_OP_MASK)
     380                 :            : #define req_op(req) \
     381                 :            :         ((req)->cmd_flags & REQ_OP_MASK)
     382                 :            : 
     383                 :            : /* obsolete, don't use in new code */
     384                 :            : static inline void bio_set_op_attrs(struct bio *bio, unsigned op,
     385                 :            :                 unsigned op_flags)
     386                 :            : {
     387                 :          3 :         bio->bi_opf = op | op_flags;
     388                 :            : }
     389                 :            : 
     390                 :            : static inline bool op_is_write(unsigned int op)
     391                 :            : {
     392                 :          3 :         return (op & 1);
     393                 :            : }
     394                 :            : 
     395                 :            : /*
     396                 :            :  * Check if the bio or request is one that needs special treatment in the
     397                 :            :  * flush state machine.
     398                 :            :  */
     399                 :            : static inline bool op_is_flush(unsigned int op)
     400                 :            : {
     401                 :          3 :         return op & (REQ_FUA | REQ_PREFLUSH);
     402                 :            : }
     403                 :            : 
     404                 :            : /*
     405                 :            :  * Reads are always treated as synchronous, as are requests with the FUA or
     406                 :            :  * PREFLUSH flag.  Other operations may be marked as synchronous using the
     407                 :            :  * REQ_SYNC flag.
     408                 :            :  */
     409                 :            : static inline bool op_is_sync(unsigned int op)
     410                 :            : {
     411                 :          3 :         return (op & REQ_OP_MASK) == REQ_OP_READ ||
     412                 :          3 :                 (op & (REQ_SYNC | REQ_FUA | REQ_PREFLUSH));
     413                 :            : }
     414                 :            : 
     415                 :            : static inline bool op_is_discard(unsigned int op)
     416                 :            : {
     417                 :          3 :         return (op & REQ_OP_MASK) == REQ_OP_DISCARD;
     418                 :            : }
     419                 :            : 
     420                 :            : static inline int op_stat_group(unsigned int op)
     421                 :            : {
     422                 :          3 :         if (op_is_discard(op))
     423                 :            :                 return STAT_DISCARD;
     424                 :          3 :         return op_is_write(op);
     425                 :            : }
     426                 :            : 
     427                 :            : typedef unsigned int blk_qc_t;
     428                 :            : #define BLK_QC_T_NONE           -1U
     429                 :            : #define BLK_QC_T_EAGAIN         -2U
     430                 :            : #define BLK_QC_T_SHIFT          16
     431                 :            : #define BLK_QC_T_INTERNAL       (1U << 31)
     432                 :            : 
     433                 :            : static inline bool blk_qc_t_valid(blk_qc_t cookie)
     434                 :            : {
     435                 :          0 :         return cookie != BLK_QC_T_NONE && cookie != BLK_QC_T_EAGAIN;
     436                 :            : }
     437                 :            : 
     438                 :            : static inline unsigned int blk_qc_t_to_queue_num(blk_qc_t cookie)
     439                 :            : {
     440                 :          0 :         return (cookie & ~BLK_QC_T_INTERNAL) >> BLK_QC_T_SHIFT;
     441                 :            : }
     442                 :            : 
     443                 :            : static inline unsigned int blk_qc_t_to_tag(blk_qc_t cookie)
     444                 :            : {
     445                 :          0 :         return cookie & ((1u << BLK_QC_T_SHIFT) - 1);
     446                 :            : }
     447                 :            : 
     448                 :            : static inline bool blk_qc_t_is_internal(blk_qc_t cookie)
     449                 :            : {
     450                 :          0 :         return (cookie & BLK_QC_T_INTERNAL) != 0;
     451                 :            : }
     452                 :            : 
     453                 :            : struct blk_rq_stat {
     454                 :            :         u64 mean;
     455                 :            :         u64 min;
     456                 :            :         u64 max;
     457                 :            :         u32 nr_samples;
     458                 :            :         u64 batch;
     459                 :            : };
     460                 :            : 
     461                 :            : #endif /* __LINUX_BLK_TYPES_H */
    

Generated by: LCOV version 1.14