LCOV - code coverage report
Current view: top level - include/linux - blkdev.h (source / functions) Hit Total Coverage
Test: btrfstest.info Lines: 4 4 100.0 %
Date: 2014-11-28 Functions: 0 0 -

          Line data    Source code
       1             : #ifndef _LINUX_BLKDEV_H
       2             : #define _LINUX_BLKDEV_H
       3             : 
       4             : #include <linux/sched.h>
       5             : 
       6             : #ifdef CONFIG_BLOCK
       7             : 
       8             : #include <linux/major.h>
       9             : #include <linux/genhd.h>
      10             : #include <linux/list.h>
      11             : #include <linux/llist.h>
      12             : #include <linux/timer.h>
      13             : #include <linux/workqueue.h>
      14             : #include <linux/pagemap.h>
      15             : #include <linux/backing-dev.h>
      16             : #include <linux/wait.h>
      17             : #include <linux/mempool.h>
      18             : #include <linux/bio.h>
      19             : #include <linux/stringify.h>
      20             : #include <linux/gfp.h>
      21             : #include <linux/bsg.h>
      22             : #include <linux/smp.h>
      23             : #include <linux/rcupdate.h>
      24             : #include <linux/percpu-refcount.h>
      25             : 
      26             : #include <asm/scatterlist.h>
      27             : 
      28             : struct module;
      29             : struct scsi_ioctl_command;
      30             : 
      31             : struct request_queue;
      32             : struct elevator_queue;
      33             : struct request_pm_state;
      34             : struct blk_trace;
      35             : struct request;
      36             : struct sg_io_hdr;
      37             : struct bsg_job;
      38             : struct blkcg_gq;
      39             : 
      40             : #define BLKDEV_MIN_RQ   4
      41             : #define BLKDEV_MAX_RQ   128     /* Default maximum */
      42             : 
      43             : /*
      44             :  * Maximum number of blkcg policies allowed to be registered concurrently.
      45             :  * Defined here to simplify include dependency.
      46             :  */
      47             : #define BLKCG_MAX_POLS          2
      48             : 
      49             : struct request;
      50             : typedef void (rq_end_io_fn)(struct request *, int);
      51             : 
      52             : #define BLK_RL_SYNCFULL         (1U << 0)
      53             : #define BLK_RL_ASYNCFULL        (1U << 1)
      54             : 
      55             : struct request_list {
      56             :         struct request_queue    *q;     /* the queue this rl belongs to */
      57             : #ifdef CONFIG_BLK_CGROUP
      58             :         struct blkcg_gq         *blkg;  /* blkg this request pool belongs to */
      59             : #endif
      60             :         /*
      61             :          * count[], starved[], and wait[] are indexed by
      62             :          * BLK_RW_SYNC/BLK_RW_ASYNC
      63             :          */
      64             :         int                     count[2];
      65             :         int                     starved[2];
      66             :         mempool_t               *rq_pool;
      67             :         wait_queue_head_t       wait[2];
      68             :         unsigned int            flags;
      69             : };
      70             : 
      71             : /*
      72             :  * request command types
      73             :  */
      74             : enum rq_cmd_type_bits {
      75             :         REQ_TYPE_FS             = 1,    /* fs request */
      76             :         REQ_TYPE_BLOCK_PC,              /* scsi command */
      77             :         REQ_TYPE_SENSE,                 /* sense request */
      78             :         REQ_TYPE_PM_SUSPEND,            /* suspend request */
      79             :         REQ_TYPE_PM_RESUME,             /* resume request */
      80             :         REQ_TYPE_PM_SHUTDOWN,           /* shutdown request */
      81             :         REQ_TYPE_SPECIAL,               /* driver defined type */
      82             :         /*
      83             :          * for ATA/ATAPI devices. this really doesn't belong here, ide should
      84             :          * use REQ_TYPE_SPECIAL and use rq->cmd[0] with the range of driver
      85             :          * private REQ_LB opcodes to differentiate what type of request this is
      86             :          */
      87             :         REQ_TYPE_ATA_TASKFILE,
      88             :         REQ_TYPE_ATA_PC,
      89             : };
      90             : 
      91             : #define BLK_MAX_CDB     16
      92             : 
      93             : /*
      94             :  * Try to put the fields that are referenced together in the same cacheline.
      95             :  *
      96             :  * If you modify this structure, make sure to update blk_rq_init() and
      97             :  * especially blk_mq_rq_ctx_init() to take care of the added fields.
      98             :  */
      99             : struct request {
     100             :         struct list_head queuelist;
     101             :         union {
     102             :                 struct call_single_data csd;
     103             :                 unsigned long fifo_time;
     104             :         };
     105             : 
     106             :         struct request_queue *q;
     107             :         struct blk_mq_ctx *mq_ctx;
     108             : 
     109             :         u64 cmd_flags;
     110             :         enum rq_cmd_type_bits cmd_type;
     111             :         unsigned long atomic_flags;
     112             : 
     113             :         int cpu;
     114             : 
     115             :         /* the following two fields are internal, NEVER access directly */
     116             :         unsigned int __data_len;        /* total data len */
     117             :         sector_t __sector;              /* sector cursor */
     118             : 
     119             :         struct bio *bio;
     120             :         struct bio *biotail;
     121             : 
     122             :         /*
     123             :          * The hash is used inside the scheduler, and killed once the
     124             :          * request reaches the dispatch list. The ipi_list is only used
     125             :          * to queue the request for softirq completion, which is long
     126             :          * after the request has been unhashed (and even removed from
     127             :          * the dispatch list).
     128             :          */
     129             :         union {
     130             :                 struct hlist_node hash; /* merge hash */
     131             :                 struct list_head ipi_list;
     132             :         };
     133             : 
     134             :         /*
     135             :          * The rb_node is only used inside the io scheduler, requests
     136             :          * are pruned when moved to the dispatch queue. So let the
     137             :          * completion_data share space with the rb_node.
     138             :          */
     139             :         union {
     140             :                 struct rb_node rb_node; /* sort/lookup */
     141             :                 void *completion_data;
     142             :         };
     143             : 
     144             :         /*
     145             :          * Three pointers are available for the IO schedulers, if they need
     146             :          * more they have to dynamically allocate it.  Flush requests are
     147             :          * never put on the IO scheduler. So let the flush fields share
     148             :          * space with the elevator data.
     149             :          */
     150             :         union {
     151             :                 struct {
     152             :                         struct io_cq            *icq;
     153             :                         void                    *priv[2];
     154             :                 } elv;
     155             : 
     156             :                 struct {
     157             :                         unsigned int            seq;
     158             :                         struct list_head        list;
     159             :                         rq_end_io_fn            *saved_end_io;
     160             :                 } flush;
     161             :         };
     162             : 
     163             :         struct gendisk *rq_disk;
     164             :         struct hd_struct *part;
     165             :         unsigned long start_time;
     166             : #ifdef CONFIG_BLK_CGROUP
     167             :         struct request_list *rl;                /* rl this rq is alloced from */
     168             :         unsigned long long start_time_ns;
     169             :         unsigned long long io_start_time_ns;    /* when passed to hardware */
     170             : #endif
     171             :         /* Number of scatter-gather DMA addr+len pairs after
     172             :          * physical address coalescing is performed.
     173             :          */
     174             :         unsigned short nr_phys_segments;
     175             : #if defined(CONFIG_BLK_DEV_INTEGRITY)
     176             :         unsigned short nr_integrity_segments;
     177             : #endif
     178             : 
     179             :         unsigned short ioprio;
     180             : 
     181             :         void *special;          /* opaque pointer available for LLD use */
     182             : 
     183             :         int tag;
     184             :         int errors;
     185             : 
     186             :         /*
     187             :          * when request is used as a packet command carrier
     188             :          */
     189             :         unsigned char __cmd[BLK_MAX_CDB];
     190             :         unsigned char *cmd;
     191             :         unsigned short cmd_len;
     192             : 
     193             :         unsigned int extra_len; /* length of alignment and padding */
     194             :         unsigned int sense_len;
     195             :         unsigned int resid_len; /* residual count */
     196             :         void *sense;
     197             : 
     198             :         unsigned long deadline;
     199             :         struct list_head timeout_list;
     200             :         unsigned int timeout;
     201             :         int retries;
     202             : 
     203             :         /*
     204             :          * completion callback.
     205             :          */
     206             :         rq_end_io_fn *end_io;
     207             :         void *end_io_data;
     208             : 
     209             :         /* for bidi */
     210             :         struct request *next_rq;
     211             : };
     212             : 
     213             : static inline unsigned short req_get_ioprio(struct request *req)
     214             : {
     215             :         return req->ioprio;
     216             : }
     217             : 
     218             : /*
     219             :  * State information carried for REQ_TYPE_PM_SUSPEND and REQ_TYPE_PM_RESUME
     220             :  * requests. Some step values could eventually be made generic.
     221             :  */
     222             : struct request_pm_state
     223             : {
     224             :         /* PM state machine step value, currently driver specific */
     225             :         int     pm_step;
     226             :         /* requested PM state value (S1, S2, S3, S4, ...) */
     227             :         u32     pm_state;
     228             :         void*   data;           /* for driver use */
     229             : };
     230             : 
     231             : #include <linux/elevator.h>
     232             : 
     233             : struct blk_queue_ctx;
     234             : 
     235             : typedef void (request_fn_proc) (struct request_queue *q);
     236             : typedef void (make_request_fn) (struct request_queue *q, struct bio *bio);
     237             : typedef int (prep_rq_fn) (struct request_queue *, struct request *);
     238             : typedef void (unprep_rq_fn) (struct request_queue *, struct request *);
     239             : 
     240             : struct bio_vec;
     241             : struct bvec_merge_data {
     242             :         struct block_device *bi_bdev;
     243             :         sector_t bi_sector;
     244             :         unsigned bi_size;
     245             :         unsigned long bi_rw;
     246             : };
     247             : typedef int (merge_bvec_fn) (struct request_queue *, struct bvec_merge_data *,
     248             :                              struct bio_vec *);
     249             : typedef void (softirq_done_fn)(struct request *);
     250             : typedef int (dma_drain_needed_fn)(struct request *);
     251             : typedef int (lld_busy_fn) (struct request_queue *q);
     252             : typedef int (bsg_job_fn) (struct bsg_job *);
     253             : 
     254             : enum blk_eh_timer_return {
     255             :         BLK_EH_NOT_HANDLED,
     256             :         BLK_EH_HANDLED,
     257             :         BLK_EH_RESET_TIMER,
     258             : };
     259             : 
     260             : typedef enum blk_eh_timer_return (rq_timed_out_fn)(struct request *);
     261             : 
     262             : enum blk_queue_state {
     263             :         Queue_down,
     264             :         Queue_up,
     265             : };
     266             : 
     267             : struct blk_queue_tag {
     268             :         struct request **tag_index;     /* map of busy tags */
     269             :         unsigned long *tag_map;         /* bit map of free/busy tags */
     270             :         int busy;                       /* current depth */
     271             :         int max_depth;                  /* what we will send to device */
     272             :         int real_max_depth;             /* what the array can hold */
     273             :         atomic_t refcnt;                /* map can be shared */
     274             : };
     275             : 
     276             : #define BLK_SCSI_MAX_CMDS       (256)
     277             : #define BLK_SCSI_CMD_PER_LONG   (BLK_SCSI_MAX_CMDS / (sizeof(long) * 8))
     278             : 
     279             : struct queue_limits {
     280             :         unsigned long           bounce_pfn;
     281             :         unsigned long           seg_boundary_mask;
     282             : 
     283             :         unsigned int            max_hw_sectors;
     284             :         unsigned int            chunk_sectors;
     285             :         unsigned int            max_sectors;
     286             :         unsigned int            max_segment_size;
     287             :         unsigned int            physical_block_size;
     288             :         unsigned int            alignment_offset;
     289             :         unsigned int            io_min;
     290             :         unsigned int            io_opt;
     291             :         unsigned int            max_discard_sectors;
     292             :         unsigned int            max_write_same_sectors;
     293             :         unsigned int            discard_granularity;
     294             :         unsigned int            discard_alignment;
     295             : 
     296             :         unsigned short          logical_block_size;
     297             :         unsigned short          max_segments;
     298             :         unsigned short          max_integrity_segments;
     299             : 
     300             :         unsigned char           misaligned;
     301             :         unsigned char           discard_misaligned;
     302             :         unsigned char           cluster;
     303             :         unsigned char           discard_zeroes_data;
     304             :         unsigned char           raid_partial_stripes_expensive;
     305             : };
     306             : 
     307             : struct request_queue {
     308             :         /*
     309             :          * Together with queue_head for cacheline sharing
     310             :          */
     311             :         struct list_head        queue_head;
     312             :         struct request          *last_merge;
     313             :         struct elevator_queue   *elevator;
     314             :         int                     nr_rqs[2];      /* # allocated [a]sync rqs */
     315             :         int                     nr_rqs_elvpriv; /* # allocated rqs w/ elvpriv */
     316             : 
     317             :         /*
     318             :          * If blkcg is not used, @q->root_rl serves all requests.  If blkcg
     319             :          * is used, root blkg allocates from @q->root_rl and all other
     320             :          * blkgs from their own blkg->rl.  Which one to use should be
     321             :          * determined using bio_request_list().
     322             :          */
     323             :         struct request_list     root_rl;
     324             : 
     325             :         request_fn_proc         *request_fn;
     326             :         make_request_fn         *make_request_fn;
     327             :         prep_rq_fn              *prep_rq_fn;
     328             :         unprep_rq_fn            *unprep_rq_fn;
     329             :         merge_bvec_fn           *merge_bvec_fn;
     330             :         softirq_done_fn         *softirq_done_fn;
     331             :         rq_timed_out_fn         *rq_timed_out_fn;
     332             :         dma_drain_needed_fn     *dma_drain_needed;
     333             :         lld_busy_fn             *lld_busy_fn;
     334             : 
     335             :         struct blk_mq_ops       *mq_ops;
     336             : 
     337             :         unsigned int            *mq_map;
     338             : 
     339             :         /* sw queues */
     340             :         struct blk_mq_ctx __percpu      *queue_ctx;
     341             :         unsigned int            nr_queues;
     342             : 
     343             :         /* hw dispatch queues */
     344             :         struct blk_mq_hw_ctx    **queue_hw_ctx;
     345             :         unsigned int            nr_hw_queues;
     346             : 
     347             :         /*
     348             :          * Dispatch queue sorting
     349             :          */
     350             :         sector_t                end_sector;
     351             :         struct request          *boundary_rq;
     352             : 
     353             :         /*
     354             :          * Delayed queue handling
     355             :          */
     356             :         struct delayed_work     delay_work;
     357             : 
     358             :         struct backing_dev_info backing_dev_info;
     359             : 
     360             :         /*
     361             :          * The queue owner gets to use this for whatever they like.
     362             :          * ll_rw_blk doesn't touch it.
     363             :          */
     364             :         void                    *queuedata;
     365             : 
     366             :         /*
     367             :          * various queue flags, see QUEUE_* below
     368             :          */
     369             :         unsigned long           queue_flags;
     370             : 
     371             :         /*
     372             :          * ida allocated id for this queue.  Used to index queues from
     373             :          * ioctx.
     374             :          */
     375             :         int                     id;
     376             : 
     377             :         /*
     378             :          * queue needs bounce pages for pages above this limit
     379             :          */
     380             :         gfp_t                   bounce_gfp;
     381             : 
     382             :         /*
     383             :          * protects queue structures from reentrancy. ->__queue_lock should
     384             :          * _never_ be used directly, it is queue private. always use
     385             :          * ->queue_lock.
     386             :          */
     387             :         spinlock_t              __queue_lock;
     388             :         spinlock_t              *queue_lock;
     389             : 
     390             :         /*
     391             :          * queue kobject
     392             :          */
     393             :         struct kobject kobj;
     394             : 
     395             :         /*
     396             :          * mq queue kobject
     397             :          */
     398             :         struct kobject mq_kobj;
     399             : 
     400             : #ifdef CONFIG_PM_RUNTIME
     401             :         struct device           *dev;
     402             :         int                     rpm_status;
     403             :         unsigned int            nr_pending;
     404             : #endif
     405             : 
     406             :         /*
     407             :          * queue settings
     408             :          */
     409             :         unsigned long           nr_requests;    /* Max # of requests */
     410             :         unsigned int            nr_congestion_on;
     411             :         unsigned int            nr_congestion_off;
     412             :         unsigned int            nr_batching;
     413             : 
     414             :         unsigned int            dma_drain_size;
     415             :         void                    *dma_drain_buffer;
     416             :         unsigned int            dma_pad_mask;
     417             :         unsigned int            dma_alignment;
     418             : 
     419             :         struct blk_queue_tag    *queue_tags;
     420             :         struct list_head        tag_busy_list;
     421             : 
     422             :         unsigned int            nr_sorted;
     423             :         unsigned int            in_flight[2];
     424             :         /*
     425             :          * Number of active block driver functions for which blk_drain_queue()
     426             :          * must wait. Must be incremented around functions that unlock the
     427             :          * queue_lock internally, e.g. scsi_request_fn().
     428             :          */
     429             :         unsigned int            request_fn_active;
     430             : 
     431             :         unsigned int            rq_timeout;
     432             :         struct timer_list       timeout;
     433             :         struct list_head        timeout_list;
     434             : 
     435             :         struct list_head        icq_list;
     436             : #ifdef CONFIG_BLK_CGROUP
     437             :         DECLARE_BITMAP          (blkcg_pols, BLKCG_MAX_POLS);
     438             :         struct blkcg_gq         *root_blkg;
     439             :         struct list_head        blkg_list;
     440             : #endif
     441             : 
     442             :         struct queue_limits     limits;
     443             : 
     444             :         /*
     445             :          * sg stuff
     446             :          */
     447             :         unsigned int            sg_timeout;
     448             :         unsigned int            sg_reserved_size;
     449             :         int                     node;
     450             : #ifdef CONFIG_BLK_DEV_IO_TRACE
     451             :         struct blk_trace        *blk_trace;
     452             : #endif
     453             :         /*
     454             :          * for flush operations
     455             :          */
     456             :         unsigned int            flush_flags;
     457             :         unsigned int            flush_not_queueable:1;
     458             :         unsigned int            flush_queue_delayed:1;
     459             :         unsigned int            flush_pending_idx:1;
     460             :         unsigned int            flush_running_idx:1;
     461             :         unsigned long           flush_pending_since;
     462             :         struct list_head        flush_queue[2];
     463             :         struct list_head        flush_data_in_flight;
     464             :         struct request          *flush_rq;
     465             :         spinlock_t              mq_flush_lock;
     466             : 
     467             :         struct list_head        requeue_list;
     468             :         spinlock_t              requeue_lock;
     469             :         struct work_struct      requeue_work;
     470             : 
     471             :         struct mutex            sysfs_lock;
     472             : 
     473             :         int                     bypass_depth;
     474             :         int                     mq_freeze_depth;
     475             : 
     476             : #if defined(CONFIG_BLK_DEV_BSG)
     477             :         bsg_job_fn              *bsg_job_fn;
     478             :         int                     bsg_job_size;
     479             :         struct bsg_class_device bsg_dev;
     480             : #endif
     481             : 
     482             : #ifdef CONFIG_BLK_DEV_THROTTLING
     483             :         /* Throttle data */
     484             :         struct throtl_data *td;
     485             : #endif
     486             :         struct rcu_head         rcu_head;
     487             :         wait_queue_head_t       mq_freeze_wq;
     488             :         struct percpu_ref       mq_usage_counter;
     489             :         struct list_head        all_q_node;
     490             : 
     491             :         struct blk_mq_tag_set   *tag_set;
     492             :         struct list_head        tag_set_list;
     493             : };
     494             : 
     495             : #define QUEUE_FLAG_QUEUED       1       /* uses generic tag queueing */
     496             : #define QUEUE_FLAG_STOPPED      2       /* queue is stopped */
     497             : #define QUEUE_FLAG_SYNCFULL     3       /* read queue has been filled */
     498             : #define QUEUE_FLAG_ASYNCFULL    4       /* write queue has been filled */
     499             : #define QUEUE_FLAG_DYING        5       /* queue being torn down */
     500             : #define QUEUE_FLAG_BYPASS       6       /* act as dumb FIFO queue */
     501             : #define QUEUE_FLAG_BIDI         7       /* queue supports bidi requests */
     502             : #define QUEUE_FLAG_NOMERGES     8       /* disable merge attempts */
     503             : #define QUEUE_FLAG_SAME_COMP    9       /* complete on same CPU-group */
     504             : #define QUEUE_FLAG_FAIL_IO     10       /* fake timeout */
     505             : #define QUEUE_FLAG_STACKABLE   11       /* supports request stacking */
     506             : #define QUEUE_FLAG_NONROT      12       /* non-rotational device (SSD) */
     507             : #define QUEUE_FLAG_VIRT        QUEUE_FLAG_NONROT /* paravirt device */
     508             : #define QUEUE_FLAG_IO_STAT     13       /* do IO stats */
     509             : #define QUEUE_FLAG_DISCARD     14       /* supports DISCARD */
     510             : #define QUEUE_FLAG_NOXMERGES   15       /* No extended merges */
     511             : #define QUEUE_FLAG_ADD_RANDOM  16       /* Contributes to random pool */
     512             : #define QUEUE_FLAG_SECDISCARD  17       /* supports SECDISCARD */
     513             : #define QUEUE_FLAG_SAME_FORCE  18       /* force complete on same CPU */
     514             : #define QUEUE_FLAG_DEAD        19       /* queue tear-down finished */
     515             : #define QUEUE_FLAG_INIT_DONE   20       /* queue is initialized */
     516             : #define QUEUE_FLAG_NO_SG_MERGE 21       /* don't attempt to merge SG segments*/
     517             : #define QUEUE_FLAG_SG_GAPS     22       /* queue doesn't support SG gaps */
     518             : 
     519             : #define QUEUE_FLAG_DEFAULT      ((1 << QUEUE_FLAG_IO_STAT) |              \
     520             :                                  (1 << QUEUE_FLAG_STACKABLE)      |       \
     521             :                                  (1 << QUEUE_FLAG_SAME_COMP)      |       \
     522             :                                  (1 << QUEUE_FLAG_ADD_RANDOM))
     523             : 
     524             : #define QUEUE_FLAG_MQ_DEFAULT   ((1 << QUEUE_FLAG_IO_STAT) |              \
     525             :                                  (1 << QUEUE_FLAG_SAME_COMP))
     526             : 
     527             : static inline void queue_lockdep_assert_held(struct request_queue *q)
     528             : {
     529             :         if (q->queue_lock)
     530             :                 lockdep_assert_held(q->queue_lock);
     531             : }
     532             : 
     533             : static inline void queue_flag_set_unlocked(unsigned int flag,
     534             :                                            struct request_queue *q)
     535             : {
     536             :         __set_bit(flag, &q->queue_flags);
     537             : }
     538             : 
     539             : static inline int queue_flag_test_and_clear(unsigned int flag,
     540             :                                             struct request_queue *q)
     541             : {
     542             :         queue_lockdep_assert_held(q);
     543             : 
     544             :         if (test_bit(flag, &q->queue_flags)) {
     545             :                 __clear_bit(flag, &q->queue_flags);
     546             :                 return 1;
     547             :         }
     548             : 
     549             :         return 0;
     550             : }
     551             : 
     552             : static inline int queue_flag_test_and_set(unsigned int flag,
     553             :                                           struct request_queue *q)
     554             : {
     555             :         queue_lockdep_assert_held(q);
     556             : 
     557             :         if (!test_bit(flag, &q->queue_flags)) {
     558             :                 __set_bit(flag, &q->queue_flags);
     559             :                 return 0;
     560             :         }
     561             : 
     562             :         return 1;
     563             : }
     564             : 
     565             : static inline void queue_flag_set(unsigned int flag, struct request_queue *q)
     566             : {
     567             :         queue_lockdep_assert_held(q);
     568             :         __set_bit(flag, &q->queue_flags);
     569             : }
     570             : 
     571             : static inline void queue_flag_clear_unlocked(unsigned int flag,
     572             :                                              struct request_queue *q)
     573             : {
     574             :         __clear_bit(flag, &q->queue_flags);
     575             : }
     576             : 
     577             : static inline int queue_in_flight(struct request_queue *q)
     578             : {
     579             :         return q->in_flight[0] + q->in_flight[1];
     580             : }
     581             : 
     582             : static inline void queue_flag_clear(unsigned int flag, struct request_queue *q)
     583             : {
     584             :         queue_lockdep_assert_held(q);
     585             :         __clear_bit(flag, &q->queue_flags);
     586             : }
     587             : 
     588             : #define blk_queue_tagged(q)     test_bit(QUEUE_FLAG_QUEUED, &(q)->queue_flags)
     589             : #define blk_queue_stopped(q)    test_bit(QUEUE_FLAG_STOPPED, &(q)->queue_flags)
     590             : #define blk_queue_dying(q)      test_bit(QUEUE_FLAG_DYING, &(q)->queue_flags)
     591             : #define blk_queue_dead(q)       test_bit(QUEUE_FLAG_DEAD, &(q)->queue_flags)
     592             : #define blk_queue_bypass(q)     test_bit(QUEUE_FLAG_BYPASS, &(q)->queue_flags)
     593             : #define blk_queue_init_done(q)  test_bit(QUEUE_FLAG_INIT_DONE, &(q)->queue_flags)
     594             : #define blk_queue_nomerges(q)   test_bit(QUEUE_FLAG_NOMERGES, &(q)->queue_flags)
     595             : #define blk_queue_noxmerges(q)  \
     596             :         test_bit(QUEUE_FLAG_NOXMERGES, &(q)->queue_flags)
     597             : #define blk_queue_nonrot(q)     test_bit(QUEUE_FLAG_NONROT, &(q)->queue_flags)
     598             : #define blk_queue_io_stat(q)    test_bit(QUEUE_FLAG_IO_STAT, &(q)->queue_flags)
     599             : #define blk_queue_add_random(q) test_bit(QUEUE_FLAG_ADD_RANDOM, &(q)->queue_flags)
     600             : #define blk_queue_stackable(q)  \
     601             :         test_bit(QUEUE_FLAG_STACKABLE, &(q)->queue_flags)
     602             : #define blk_queue_discard(q)    test_bit(QUEUE_FLAG_DISCARD, &(q)->queue_flags)
     603             : #define blk_queue_secdiscard(q) (blk_queue_discard(q) && \
     604             :         test_bit(QUEUE_FLAG_SECDISCARD, &(q)->queue_flags))
     605             : 
     606             : #define blk_noretry_request(rq) \
     607             :         ((rq)->cmd_flags & (REQ_FAILFAST_DEV|REQ_FAILFAST_TRANSPORT| \
     608             :                              REQ_FAILFAST_DRIVER))
     609             : 
     610             : #define blk_account_rq(rq) \
     611             :         (((rq)->cmd_flags & REQ_STARTED) && \
     612             :          ((rq)->cmd_type == REQ_TYPE_FS))
     613             : 
     614             : #define blk_pm_request(rq)      \
     615             :         ((rq)->cmd_type == REQ_TYPE_PM_SUSPEND || \
     616             :          (rq)->cmd_type == REQ_TYPE_PM_RESUME)
     617             : 
     618             : #define blk_rq_cpu_valid(rq)    ((rq)->cpu != -1)
     619             : #define blk_bidi_rq(rq)         ((rq)->next_rq != NULL)
     620             : /* rq->queuelist of dequeued request must be list_empty() */
     621             : #define blk_queued_rq(rq)       (!list_empty(&(rq)->queuelist))
     622             : 
     623             : #define list_entry_rq(ptr)      list_entry((ptr), struct request, queuelist)
     624             : 
     625             : #define rq_data_dir(rq)         (((rq)->cmd_flags & 1) != 0)
     626             : 
     627             : /*
     628             :  * Driver can handle struct request, if it either has an old style
     629             :  * request_fn defined, or is blk-mq based.
     630             :  */
     631             : static inline bool queue_is_rq_based(struct request_queue *q)
     632             : {
     633             :         return q->request_fn || q->mq_ops;
     634             : }
     635             : 
     636             : static inline unsigned int blk_queue_cluster(struct request_queue *q)
     637             : {
     638             :         return q->limits.cluster;
     639             : }
     640             : 
     641             : /*
     642             :  * We regard a request as sync, if either a read or a sync write
     643             :  */
     644             : static inline bool rw_is_sync(unsigned int rw_flags)
     645             : {
     646             :         return !(rw_flags & REQ_WRITE) || (rw_flags & REQ_SYNC);
     647             : }
     648             : 
     649             : static inline bool rq_is_sync(struct request *rq)
     650             : {
     651             :         return rw_is_sync(rq->cmd_flags);
     652             : }
     653             : 
     654             : static inline bool blk_rl_full(struct request_list *rl, bool sync)
     655             : {
     656             :         unsigned int flag = sync ? BLK_RL_SYNCFULL : BLK_RL_ASYNCFULL;
     657             : 
     658             :         return rl->flags & flag;
     659             : }
     660             : 
     661             : static inline void blk_set_rl_full(struct request_list *rl, bool sync)
     662             : {
     663             :         unsigned int flag = sync ? BLK_RL_SYNCFULL : BLK_RL_ASYNCFULL;
     664             : 
     665             :         rl->flags |= flag;
     666             : }
     667             : 
     668             : static inline void blk_clear_rl_full(struct request_list *rl, bool sync)
     669             : {
     670             :         unsigned int flag = sync ? BLK_RL_SYNCFULL : BLK_RL_ASYNCFULL;
     671             : 
     672             :         rl->flags &= ~flag;
     673             : }
     674             : 
     675             : static inline bool rq_mergeable(struct request *rq)
     676             : {
     677             :         if (rq->cmd_type != REQ_TYPE_FS)
     678             :                 return false;
     679             : 
     680             :         if (rq->cmd_flags & REQ_NOMERGE_FLAGS)
     681             :                 return false;
     682             : 
     683             :         return true;
     684             : }
     685             : 
     686             : static inline bool blk_check_merge_flags(unsigned int flags1,
     687             :                                          unsigned int flags2)
     688             : {
     689             :         if ((flags1 & REQ_DISCARD) != (flags2 & REQ_DISCARD))
     690             :                 return false;
     691             : 
     692             :         if ((flags1 & REQ_SECURE) != (flags2 & REQ_SECURE))
     693             :                 return false;
     694             : 
     695             :         if ((flags1 & REQ_WRITE_SAME) != (flags2 & REQ_WRITE_SAME))
     696             :                 return false;
     697             : 
     698             :         return true;
     699             : }
     700             : 
     701             : static inline bool blk_write_same_mergeable(struct bio *a, struct bio *b)
     702             : {
     703             :         if (bio_data(a) == bio_data(b))
     704             :                 return true;
     705             : 
     706             :         return false;
     707             : }
     708             : 
     709             : /*
     710             :  * q->prep_rq_fn return values
     711             :  */
     712             : #define BLKPREP_OK              0       /* serve it */
     713             : #define BLKPREP_KILL            1       /* fatal error, kill */
     714             : #define BLKPREP_DEFER           2       /* leave on queue */
     715             : 
     716             : extern unsigned long blk_max_low_pfn, blk_max_pfn;
     717             : 
     718             : /*
     719             :  * standard bounce addresses:
     720             :  *
     721             :  * BLK_BOUNCE_HIGH      : bounce all highmem pages
     722             :  * BLK_BOUNCE_ANY       : don't bounce anything
     723             :  * BLK_BOUNCE_ISA       : bounce pages above ISA DMA boundary
     724             :  */
     725             : 
     726             : #if BITS_PER_LONG == 32
     727             : #define BLK_BOUNCE_HIGH         ((u64)blk_max_low_pfn << PAGE_SHIFT)
     728             : #else
     729             : #define BLK_BOUNCE_HIGH         -1ULL
     730             : #endif
     731             : #define BLK_BOUNCE_ANY          (-1ULL)
     732             : #define BLK_BOUNCE_ISA          (DMA_BIT_MASK(24))
     733             : 
     734             : /*
     735             :  * default timeout for SG_IO if none specified
     736             :  */
     737             : #define BLK_DEFAULT_SG_TIMEOUT  (60 * HZ)
     738             : #define BLK_MIN_SG_TIMEOUT      (7 * HZ)
     739             : 
     740             : #ifdef CONFIG_BOUNCE
     741             : extern int init_emergency_isa_pool(void);
     742             : extern void blk_queue_bounce(struct request_queue *q, struct bio **bio);
     743             : #else
     744             : static inline int init_emergency_isa_pool(void)
     745             : {
     746             :         return 0;
     747             : }
     748             : static inline void blk_queue_bounce(struct request_queue *q, struct bio **bio)
     749             : {
     750             : }
     751             : #endif /* CONFIG_MMU */
     752             : 
     753             : struct rq_map_data {
     754             :         struct page **pages;
     755             :         int page_order;
     756             :         int nr_entries;
     757             :         unsigned long offset;
     758             :         int null_mapped;
     759             :         int from_user;
     760             : };
     761             : 
     762             : struct req_iterator {
     763             :         struct bvec_iter iter;
     764             :         struct bio *bio;
     765             : };
     766             : 
     767             : /* This should not be used directly - use rq_for_each_segment */
     768             : #define for_each_bio(_bio)              \
     769             :         for (; _bio; _bio = _bio->bi_next)
     770             : #define __rq_for_each_bio(_bio, rq)     \
     771             :         if ((rq->bio))                       \
     772             :                 for (_bio = (rq)->bio; _bio; _bio = _bio->bi_next)
     773             : 
     774             : #define rq_for_each_segment(bvl, _rq, _iter)                    \
     775             :         __rq_for_each_bio(_iter.bio, _rq)                       \
     776             :                 bio_for_each_segment(bvl, _iter.bio, _iter.iter)
     777             : 
     778             : #define rq_iter_last(bvec, _iter)                               \
     779             :                 (_iter.bio->bi_next == NULL &&                       \
     780             :                  bio_iter_last(bvec, _iter.iter))
     781             : 
     782             : #ifndef ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE
     783             : # error "You should define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE for your platform"
     784             : #endif
     785             : #if ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE
     786             : extern void rq_flush_dcache_pages(struct request *rq);
     787             : #else
     788             : static inline void rq_flush_dcache_pages(struct request *rq)
     789             : {
     790             : }
     791             : #endif
     792             : 
     793             : extern int blk_register_queue(struct gendisk *disk);
     794             : extern void blk_unregister_queue(struct gendisk *disk);
     795             : extern void generic_make_request(struct bio *bio);
     796             : extern void blk_rq_init(struct request_queue *q, struct request *rq);
     797             : extern void blk_put_request(struct request *);
     798             : extern void __blk_put_request(struct request_queue *, struct request *);
     799             : extern struct request *blk_get_request(struct request_queue *, int, gfp_t);
     800             : extern struct request *blk_make_request(struct request_queue *, struct bio *,
     801             :                                         gfp_t);
     802             : extern void blk_rq_set_block_pc(struct request *);
     803             : extern void blk_requeue_request(struct request_queue *, struct request *);
     804             : extern void blk_add_request_payload(struct request *rq, struct page *page,
     805             :                 unsigned int len);
     806             : extern int blk_rq_check_limits(struct request_queue *q, struct request *rq);
     807             : extern int blk_lld_busy(struct request_queue *q);
     808             : extern int blk_rq_prep_clone(struct request *rq, struct request *rq_src,
     809             :                              struct bio_set *bs, gfp_t gfp_mask,
     810             :                              int (*bio_ctr)(struct bio *, struct bio *, void *),
     811             :                              void *data);
     812             : extern void blk_rq_unprep_clone(struct request *rq);
     813             : extern int blk_insert_cloned_request(struct request_queue *q,
     814             :                                      struct request *rq);
     815             : extern void blk_delay_queue(struct request_queue *, unsigned long);
     816             : extern void blk_recount_segments(struct request_queue *, struct bio *);
     817             : extern int scsi_verify_blk_ioctl(struct block_device *, unsigned int);
     818             : extern int scsi_cmd_blk_ioctl(struct block_device *, fmode_t,
     819             :                               unsigned int, void __user *);
     820             : extern int scsi_cmd_ioctl(struct request_queue *, struct gendisk *, fmode_t,
     821             :                           unsigned int, void __user *);
     822             : extern int sg_scsi_ioctl(struct request_queue *, struct gendisk *, fmode_t,
     823             :                          struct scsi_ioctl_command __user *);
     824             : 
     825             : extern void blk_queue_bio(struct request_queue *q, struct bio *bio);
     826             : 
     827             : /*
     828             :  * A queue has just exitted congestion.  Note this in the global counter of
     829             :  * congested queues, and wake up anyone who was waiting for requests to be
     830             :  * put back.
     831             :  */
     832             : static inline void blk_clear_queue_congested(struct request_queue *q, int sync)
     833             : {
     834             :         clear_bdi_congested(&q->backing_dev_info, sync);
     835             : }
     836             : 
     837             : /*
     838             :  * A queue has just entered congestion.  Flag that in the queue's VM-visible
     839             :  * state flags and increment the global gounter of congested queues.
     840             :  */
     841             : static inline void blk_set_queue_congested(struct request_queue *q, int sync)
     842             : {
     843             :         set_bdi_congested(&q->backing_dev_info, sync);
     844             : }
     845             : 
     846             : extern void blk_start_queue(struct request_queue *q);
     847             : extern void blk_stop_queue(struct request_queue *q);
     848             : extern void blk_sync_queue(struct request_queue *q);
     849             : extern void __blk_stop_queue(struct request_queue *q);
     850             : extern void __blk_run_queue(struct request_queue *q);
     851             : extern void blk_run_queue(struct request_queue *);
     852             : extern void blk_run_queue_async(struct request_queue *q);
     853             : extern int blk_rq_map_user(struct request_queue *, struct request *,
     854             :                            struct rq_map_data *, void __user *, unsigned long,
     855             :                            gfp_t);
     856             : extern int blk_rq_unmap_user(struct bio *);
     857             : extern int blk_rq_map_kern(struct request_queue *, struct request *, void *, unsigned int, gfp_t);
     858             : extern int blk_rq_map_user_iov(struct request_queue *, struct request *,
     859             :                                struct rq_map_data *, const struct sg_iovec *,
     860             :                                int, unsigned int, gfp_t);
     861             : extern int blk_execute_rq(struct request_queue *, struct gendisk *,
     862             :                           struct request *, int);
     863             : extern void blk_execute_rq_nowait(struct request_queue *, struct gendisk *,
     864             :                                   struct request *, int, rq_end_io_fn *);
     865             : 
     866             : static inline struct request_queue *bdev_get_queue(struct block_device *bdev)
     867             : {
     868      213418 :         return bdev->bd_disk->queue;
     869             : }
     870             : 
     871             : /*
     872             :  * blk_rq_pos()                 : the current sector
     873             :  * blk_rq_bytes()               : bytes left in the entire request
     874             :  * blk_rq_cur_bytes()           : bytes left in the current segment
     875             :  * blk_rq_err_bytes()           : bytes left till the next error boundary
     876             :  * blk_rq_sectors()             : sectors left in the entire request
     877             :  * blk_rq_cur_sectors()         : sectors left in the current segment
     878             :  */
     879             : static inline sector_t blk_rq_pos(const struct request *rq)
     880             : {
     881             :         return rq->__sector;
     882             : }
     883             : 
     884             : static inline unsigned int blk_rq_bytes(const struct request *rq)
     885             : {
     886             :         return rq->__data_len;
     887             : }
     888             : 
     889             : static inline int blk_rq_cur_bytes(const struct request *rq)
     890             : {
     891             :         return rq->bio ? bio_cur_bytes(rq->bio) : 0;
     892             : }
     893             : 
     894             : extern unsigned int blk_rq_err_bytes(const struct request *rq);
     895             : 
     896             : static inline unsigned int blk_rq_sectors(const struct request *rq)
     897             : {
     898             :         return blk_rq_bytes(rq) >> 9;
     899             : }
     900             : 
     901             : static inline unsigned int blk_rq_cur_sectors(const struct request *rq)
     902             : {
     903             :         return blk_rq_cur_bytes(rq) >> 9;
     904             : }
     905             : 
     906             : static inline unsigned int blk_queue_get_max_sectors(struct request_queue *q,
     907             :                                                      unsigned int cmd_flags)
     908             : {
     909             :         if (unlikely(cmd_flags & REQ_DISCARD))
     910             :                 return min(q->limits.max_discard_sectors, UINT_MAX >> 9);
     911             : 
     912             :         if (unlikely(cmd_flags & REQ_WRITE_SAME))
     913             :                 return q->limits.max_write_same_sectors;
     914             : 
     915             :         return q->limits.max_sectors;
     916             : }
     917             : 
     918             : /*
     919             :  * Return maximum size of a request at given offset. Only valid for
     920             :  * file system requests.
     921             :  */
     922             : static inline unsigned int blk_max_size_offset(struct request_queue *q,
     923             :                                                sector_t offset)
     924             : {
     925             :         if (!q->limits.chunk_sectors)
     926             :                 return q->limits.max_sectors;
     927             : 
     928             :         return q->limits.chunk_sectors -
     929             :                         (offset & (q->limits.chunk_sectors - 1));
     930             : }
     931             : 
     932             : static inline unsigned int blk_rq_get_max_sectors(struct request *rq)
     933             : {
     934             :         struct request_queue *q = rq->q;
     935             : 
     936             :         if (unlikely(rq->cmd_type == REQ_TYPE_BLOCK_PC))
     937             :                 return q->limits.max_hw_sectors;
     938             : 
     939             :         if (!q->limits.chunk_sectors)
     940             :                 return blk_queue_get_max_sectors(q, rq->cmd_flags);
     941             : 
     942             :         return min(blk_max_size_offset(q, blk_rq_pos(rq)),
     943             :                         blk_queue_get_max_sectors(q, rq->cmd_flags));
     944             : }
     945             : 
     946             : static inline unsigned int blk_rq_count_bios(struct request *rq)
     947             : {
     948             :         unsigned int nr_bios = 0;
     949             :         struct bio *bio;
     950             : 
     951             :         __rq_for_each_bio(bio, rq)
     952             :                 nr_bios++;
     953             : 
     954             :         return nr_bios;
     955             : }
     956             : 
     957             : /*
     958             :  * Request issue related functions.
     959             :  */
     960             : extern struct request *blk_peek_request(struct request_queue *q);
     961             : extern void blk_start_request(struct request *rq);
     962             : extern struct request *blk_fetch_request(struct request_queue *q);
     963             : 
     964             : /*
     965             :  * Request completion related functions.
     966             :  *
     967             :  * blk_update_request() completes given number of bytes and updates
     968             :  * the request without completing it.
     969             :  *
     970             :  * blk_end_request() and friends.  __blk_end_request() must be called
     971             :  * with the request queue spinlock acquired.
     972             :  *
     973             :  * Several drivers define their own end_request and call
     974             :  * blk_end_request() for parts of the original function.
     975             :  * This prevents code duplication in drivers.
     976             :  */
     977             : extern bool blk_update_request(struct request *rq, int error,
     978             :                                unsigned int nr_bytes);
     979             : extern void blk_finish_request(struct request *rq, int error);
     980             : extern bool blk_end_request(struct request *rq, int error,
     981             :                             unsigned int nr_bytes);
     982             : extern void blk_end_request_all(struct request *rq, int error);
     983             : extern bool blk_end_request_cur(struct request *rq, int error);
     984             : extern bool blk_end_request_err(struct request *rq, int error);
     985             : extern bool __blk_end_request(struct request *rq, int error,
     986             :                               unsigned int nr_bytes);
     987             : extern void __blk_end_request_all(struct request *rq, int error);
     988             : extern bool __blk_end_request_cur(struct request *rq, int error);
     989             : extern bool __blk_end_request_err(struct request *rq, int error);
     990             : 
     991             : extern void blk_complete_request(struct request *);
     992             : extern void __blk_complete_request(struct request *);
     993             : extern void blk_abort_request(struct request *);
     994             : extern void blk_unprep_request(struct request *);
     995             : 
     996             : /*
     997             :  * Access functions for manipulating queue properties
     998             :  */
     999             : extern struct request_queue *blk_init_queue_node(request_fn_proc *rfn,
    1000             :                                         spinlock_t *lock, int node_id);
    1001             : extern struct request_queue *blk_init_queue(request_fn_proc *, spinlock_t *);
    1002             : extern struct request_queue *blk_init_allocated_queue(struct request_queue *,
    1003             :                                                       request_fn_proc *, spinlock_t *);
    1004             : extern void blk_cleanup_queue(struct request_queue *);
    1005             : extern void blk_queue_make_request(struct request_queue *, make_request_fn *);
    1006             : extern void blk_queue_bounce_limit(struct request_queue *, u64);
    1007             : extern void blk_limits_max_hw_sectors(struct queue_limits *, unsigned int);
    1008             : extern void blk_queue_max_hw_sectors(struct request_queue *, unsigned int);
    1009             : extern void blk_queue_chunk_sectors(struct request_queue *, unsigned int);
    1010             : extern void blk_queue_max_segments(struct request_queue *, unsigned short);
    1011             : extern void blk_queue_max_segment_size(struct request_queue *, unsigned int);
    1012             : extern void blk_queue_max_discard_sectors(struct request_queue *q,
    1013             :                 unsigned int max_discard_sectors);
    1014             : extern void blk_queue_max_write_same_sectors(struct request_queue *q,
    1015             :                 unsigned int max_write_same_sectors);
    1016             : extern void blk_queue_logical_block_size(struct request_queue *, unsigned short);
    1017             : extern void blk_queue_physical_block_size(struct request_queue *, unsigned int);
    1018             : extern void blk_queue_alignment_offset(struct request_queue *q,
    1019             :                                        unsigned int alignment);
    1020             : extern void blk_limits_io_min(struct queue_limits *limits, unsigned int min);
    1021             : extern void blk_queue_io_min(struct request_queue *q, unsigned int min);
    1022             : extern void blk_limits_io_opt(struct queue_limits *limits, unsigned int opt);
    1023             : extern void blk_queue_io_opt(struct request_queue *q, unsigned int opt);
    1024             : extern void blk_set_default_limits(struct queue_limits *lim);
    1025             : extern void blk_set_stacking_limits(struct queue_limits *lim);
    1026             : extern int blk_stack_limits(struct queue_limits *t, struct queue_limits *b,
    1027             :                             sector_t offset);
    1028             : extern int bdev_stack_limits(struct queue_limits *t, struct block_device *bdev,
    1029             :                             sector_t offset);
    1030             : extern void disk_stack_limits(struct gendisk *disk, struct block_device *bdev,
    1031             :                               sector_t offset);
    1032             : extern void blk_queue_stack_limits(struct request_queue *t, struct request_queue *b);
    1033             : extern void blk_queue_dma_pad(struct request_queue *, unsigned int);
    1034             : extern void blk_queue_update_dma_pad(struct request_queue *, unsigned int);
    1035             : extern int blk_queue_dma_drain(struct request_queue *q,
    1036             :                                dma_drain_needed_fn *dma_drain_needed,
    1037             :                                void *buf, unsigned int size);
    1038             : extern void blk_queue_lld_busy(struct request_queue *q, lld_busy_fn *fn);
    1039             : extern void blk_queue_segment_boundary(struct request_queue *, unsigned long);
    1040             : extern void blk_queue_prep_rq(struct request_queue *, prep_rq_fn *pfn);
    1041             : extern void blk_queue_unprep_rq(struct request_queue *, unprep_rq_fn *ufn);
    1042             : extern void blk_queue_merge_bvec(struct request_queue *, merge_bvec_fn *);
    1043             : extern void blk_queue_dma_alignment(struct request_queue *, int);
    1044             : extern void blk_queue_update_dma_alignment(struct request_queue *, int);
    1045             : extern void blk_queue_softirq_done(struct request_queue *, softirq_done_fn *);
    1046             : extern void blk_queue_rq_timed_out(struct request_queue *, rq_timed_out_fn *);
    1047             : extern void blk_queue_rq_timeout(struct request_queue *, unsigned int);
    1048             : extern void blk_queue_flush(struct request_queue *q, unsigned int flush);
    1049             : extern void blk_queue_flush_queueable(struct request_queue *q, bool queueable);
    1050             : extern struct backing_dev_info *blk_get_backing_dev_info(struct block_device *bdev);
    1051             : 
    1052             : extern int blk_rq_map_sg(struct request_queue *, struct request *, struct scatterlist *);
    1053             : extern int blk_bio_map_sg(struct request_queue *q, struct bio *bio,
    1054             :                           struct scatterlist *sglist);
    1055             : extern void blk_dump_rq_flags(struct request *, char *);
    1056             : extern long nr_blockdev_pages(void);
    1057             : 
    1058             : bool __must_check blk_get_queue(struct request_queue *);
    1059             : struct request_queue *blk_alloc_queue(gfp_t);
    1060             : struct request_queue *blk_alloc_queue_node(gfp_t, int);
    1061             : extern void blk_put_queue(struct request_queue *);
    1062             : 
    1063             : /*
    1064             :  * block layer runtime pm functions
    1065             :  */
    1066             : #ifdef CONFIG_PM_RUNTIME
    1067             : extern void blk_pm_runtime_init(struct request_queue *q, struct device *dev);
    1068             : extern int blk_pre_runtime_suspend(struct request_queue *q);
    1069             : extern void blk_post_runtime_suspend(struct request_queue *q, int err);
    1070             : extern void blk_pre_runtime_resume(struct request_queue *q);
    1071             : extern void blk_post_runtime_resume(struct request_queue *q, int err);
    1072             : #else
    1073             : static inline void blk_pm_runtime_init(struct request_queue *q,
    1074             :         struct device *dev) {}
    1075             : static inline int blk_pre_runtime_suspend(struct request_queue *q)
    1076             : {
    1077             :         return -ENOSYS;
    1078             : }
    1079             : static inline void blk_post_runtime_suspend(struct request_queue *q, int err) {}
    1080             : static inline void blk_pre_runtime_resume(struct request_queue *q) {}
    1081             : static inline void blk_post_runtime_resume(struct request_queue *q, int err) {}
    1082             : #endif
    1083             : 
    1084             : /*
    1085             :  * blk_plug permits building a queue of related requests by holding the I/O
    1086             :  * fragments for a short period. This allows merging of sequential requests
    1087             :  * into single larger request. As the requests are moved from a per-task list to
    1088             :  * the device's request_queue in a batch, this results in improved scalability
    1089             :  * as the lock contention for request_queue lock is reduced.
    1090             :  *
    1091             :  * It is ok not to disable preemption when adding the request to the plug list
    1092             :  * or when attempting a merge, because blk_schedule_flush_list() will only flush
    1093             :  * the plug list when the task sleeps by itself. For details, please see
    1094             :  * schedule() where blk_schedule_flush_plug() is called.
    1095             :  */
    1096             : struct blk_plug {
    1097             :         struct list_head list; /* requests */
    1098             :         struct list_head mq_list; /* blk-mq requests */
    1099             :         struct list_head cb_list; /* md requires an unplug callback */
    1100             : };
    1101             : #define BLK_MAX_REQUEST_COUNT 16
    1102             : 
    1103             : struct blk_plug_cb;
    1104             : typedef void (*blk_plug_cb_fn)(struct blk_plug_cb *, bool);
    1105             : struct blk_plug_cb {
    1106             :         struct list_head list;
    1107             :         blk_plug_cb_fn callback;
    1108             :         void *data;
    1109             : };
    1110             : extern struct blk_plug_cb *blk_check_plugged(blk_plug_cb_fn unplug,
    1111             :                                              void *data, int size);
    1112             : extern void blk_start_plug(struct blk_plug *);
    1113             : extern void blk_finish_plug(struct blk_plug *);
    1114             : extern void blk_flush_plug_list(struct blk_plug *, bool);
    1115             : 
    1116             : static inline void blk_flush_plug(struct task_struct *tsk)
    1117             : {
    1118             :         struct blk_plug *plug = tsk->plug;
    1119             : 
    1120             :         if (plug)
    1121             :                 blk_flush_plug_list(plug, false);
    1122             : }
    1123             : 
    1124             : static inline void blk_schedule_flush_plug(struct task_struct *tsk)
    1125             : {
    1126             :         struct blk_plug *plug = tsk->plug;
    1127             : 
    1128             :         if (plug)
    1129             :                 blk_flush_plug_list(plug, true);
    1130             : }
    1131             : 
    1132             : static inline bool blk_needs_flush_plug(struct task_struct *tsk)
    1133             : {
    1134             :         struct blk_plug *plug = tsk->plug;
    1135             : 
    1136             :         return plug &&
    1137             :                 (!list_empty(&plug->list) ||
    1138             :                  !list_empty(&plug->mq_list) ||
    1139             :                  !list_empty(&plug->cb_list));
    1140             : }
    1141             : 
    1142             : /*
    1143             :  * tag stuff
    1144             :  */
    1145             : #define blk_rq_tagged(rq) \
    1146             :         ((rq)->mq_ctx || ((rq)->cmd_flags & REQ_QUEUED))
    1147             : extern int blk_queue_start_tag(struct request_queue *, struct request *);
    1148             : extern struct request *blk_queue_find_tag(struct request_queue *, int);
    1149             : extern void blk_queue_end_tag(struct request_queue *, struct request *);
    1150             : extern int blk_queue_init_tags(struct request_queue *, int, struct blk_queue_tag *);
    1151             : extern void blk_queue_free_tags(struct request_queue *);
    1152             : extern int blk_queue_resize_tags(struct request_queue *, int);
    1153             : extern void blk_queue_invalidate_tags(struct request_queue *);
    1154             : extern struct blk_queue_tag *blk_init_tags(int);
    1155             : extern void blk_free_tags(struct blk_queue_tag *);
    1156             : 
    1157             : static inline struct request *blk_map_queue_find_tag(struct blk_queue_tag *bqt,
    1158             :                                                 int tag)
    1159             : {
    1160             :         if (unlikely(bqt == NULL || tag >= bqt->real_max_depth))
    1161             :                 return NULL;
    1162             :         return bqt->tag_index[tag];
    1163             : }
    1164             : 
    1165             : #define BLKDEV_DISCARD_SECURE  0x01    /* secure discard */
    1166             : 
    1167             : extern int blkdev_issue_flush(struct block_device *, gfp_t, sector_t *);
    1168             : extern int blkdev_issue_discard(struct block_device *bdev, sector_t sector,
    1169             :                 sector_t nr_sects, gfp_t gfp_mask, unsigned long flags);
    1170             : extern int blkdev_issue_write_same(struct block_device *bdev, sector_t sector,
    1171             :                 sector_t nr_sects, gfp_t gfp_mask, struct page *page);
    1172             : extern int blkdev_issue_zeroout(struct block_device *bdev, sector_t sector,
    1173             :                         sector_t nr_sects, gfp_t gfp_mask);
    1174             : static inline int sb_issue_discard(struct super_block *sb, sector_t block,
    1175             :                 sector_t nr_blocks, gfp_t gfp_mask, unsigned long flags)
    1176             : {
    1177             :         return blkdev_issue_discard(sb->s_bdev, block << (sb->s_blocksize_bits - 9),
    1178             :                                     nr_blocks << (sb->s_blocksize_bits - 9),
    1179             :                                     gfp_mask, flags);
    1180             : }
    1181             : static inline int sb_issue_zeroout(struct super_block *sb, sector_t block,
    1182             :                 sector_t nr_blocks, gfp_t gfp_mask)
    1183             : {
    1184             :         return blkdev_issue_zeroout(sb->s_bdev,
    1185             :                                     block << (sb->s_blocksize_bits - 9),
    1186             :                                     nr_blocks << (sb->s_blocksize_bits - 9),
    1187             :                                     gfp_mask);
    1188             : }
    1189             : 
    1190             : extern int blk_verify_command(unsigned char *cmd, fmode_t has_write_perm);
    1191             : 
    1192             : enum blk_default_limits {
    1193             :         BLK_MAX_SEGMENTS        = 128,
    1194             :         BLK_SAFE_MAX_SECTORS    = 255,
    1195             :         BLK_DEF_MAX_SECTORS     = 1024,
    1196             :         BLK_MAX_SEGMENT_SIZE    = 65536,
    1197             :         BLK_SEG_BOUNDARY_MASK   = 0xFFFFFFFFUL,
    1198             : };
    1199             : 
    1200             : #define blkdev_entry_to_request(entry) list_entry((entry), struct request, queuelist)
    1201             : 
    1202             : static inline unsigned long queue_bounce_pfn(struct request_queue *q)
    1203             : {
    1204             :         return q->limits.bounce_pfn;
    1205             : }
    1206             : 
    1207             : static inline unsigned long queue_segment_boundary(struct request_queue *q)
    1208             : {
    1209             :         return q->limits.seg_boundary_mask;
    1210             : }
    1211             : 
    1212             : static inline unsigned int queue_max_sectors(struct request_queue *q)
    1213             : {
    1214             :         return q->limits.max_sectors;
    1215             : }
    1216             : 
    1217             : static inline unsigned int queue_max_hw_sectors(struct request_queue *q)
    1218             : {
    1219             :         return q->limits.max_hw_sectors;
    1220             : }
    1221             : 
    1222             : static inline unsigned short queue_max_segments(struct request_queue *q)
    1223             : {
    1224             :         return q->limits.max_segments;
    1225             : }
    1226             : 
    1227             : static inline unsigned int queue_max_segment_size(struct request_queue *q)
    1228             : {
    1229             :         return q->limits.max_segment_size;
    1230             : }
    1231             : 
    1232             : static inline unsigned short queue_logical_block_size(struct request_queue *q)
    1233             : {
    1234             :         int retval = 512;
    1235             : 
    1236             :         if (q && q->limits.logical_block_size)
    1237             :                 retval = q->limits.logical_block_size;
    1238             : 
    1239             :         return retval;
    1240             : }
    1241             : 
    1242             : static inline unsigned short bdev_logical_block_size(struct block_device *bdev)
    1243             : {
    1244             :         return queue_logical_block_size(bdev_get_queue(bdev));
    1245             : }
    1246             : 
    1247             : static inline unsigned int queue_physical_block_size(struct request_queue *q)
    1248             : {
    1249             :         return q->limits.physical_block_size;
    1250             : }
    1251             : 
    1252             : static inline unsigned int bdev_physical_block_size(struct block_device *bdev)
    1253             : {
    1254             :         return queue_physical_block_size(bdev_get_queue(bdev));
    1255             : }
    1256             : 
    1257             : static inline unsigned int queue_io_min(struct request_queue *q)
    1258             : {
    1259             :         return q->limits.io_min;
    1260             : }
    1261             : 
    1262             : static inline int bdev_io_min(struct block_device *bdev)
    1263             : {
    1264             :         return queue_io_min(bdev_get_queue(bdev));
    1265             : }
    1266             : 
    1267             : static inline unsigned int queue_io_opt(struct request_queue *q)
    1268             : {
    1269             :         return q->limits.io_opt;
    1270             : }
    1271             : 
    1272             : static inline int bdev_io_opt(struct block_device *bdev)
    1273             : {
    1274             :         return queue_io_opt(bdev_get_queue(bdev));
    1275             : }
    1276             : 
    1277             : static inline int queue_alignment_offset(struct request_queue *q)
    1278             : {
    1279             :         if (q->limits.misaligned)
    1280             :                 return -1;
    1281             : 
    1282             :         return q->limits.alignment_offset;
    1283             : }
    1284             : 
    1285             : static inline int queue_limit_alignment_offset(struct queue_limits *lim, sector_t sector)
    1286             : {
    1287             :         unsigned int granularity = max(lim->physical_block_size, lim->io_min);
    1288             :         unsigned int alignment = (sector << 9) & (granularity - 1);
    1289             : 
    1290             :         return (granularity + lim->alignment_offset - alignment)
    1291             :                 & (granularity - 1);
    1292             : }
    1293             : 
    1294             : static inline int bdev_alignment_offset(struct block_device *bdev)
    1295             : {
    1296             :         struct request_queue *q = bdev_get_queue(bdev);
    1297             : 
    1298             :         if (q->limits.misaligned)
    1299             :                 return -1;
    1300             : 
    1301             :         if (bdev != bdev->bd_contains)
    1302             :                 return bdev->bd_part->alignment_offset;
    1303             : 
    1304             :         return q->limits.alignment_offset;
    1305             : }
    1306             : 
    1307             : static inline int queue_discard_alignment(struct request_queue *q)
    1308             : {
    1309             :         if (q->limits.discard_misaligned)
    1310             :                 return -1;
    1311             : 
    1312             :         return q->limits.discard_alignment;
    1313             : }
    1314             : 
    1315             : static inline int queue_limit_discard_alignment(struct queue_limits *lim, sector_t sector)
    1316             : {
    1317             :         unsigned int alignment, granularity, offset;
    1318             : 
    1319             :         if (!lim->max_discard_sectors)
    1320             :                 return 0;
    1321             : 
    1322             :         /* Why are these in bytes, not sectors? */
    1323             :         alignment = lim->discard_alignment >> 9;
    1324             :         granularity = lim->discard_granularity >> 9;
    1325             :         if (!granularity)
    1326             :                 return 0;
    1327             : 
    1328             :         /* Offset of the partition start in 'granularity' sectors */
    1329             :         offset = sector_div(sector, granularity);
    1330             : 
    1331             :         /* And why do we do this modulus *again* in blkdev_issue_discard()? */
    1332             :         offset = (granularity + alignment - offset) % granularity;
    1333             : 
    1334             :         /* Turn it back into bytes, gaah */
    1335             :         return offset << 9;
    1336             : }
    1337             : 
    1338             : static inline int bdev_discard_alignment(struct block_device *bdev)
    1339             : {
    1340             :         struct request_queue *q = bdev_get_queue(bdev);
    1341             : 
    1342             :         if (bdev != bdev->bd_contains)
    1343             :                 return bdev->bd_part->discard_alignment;
    1344             : 
    1345             :         return q->limits.discard_alignment;
    1346             : }
    1347             : 
    1348             : static inline unsigned int queue_discard_zeroes_data(struct request_queue *q)
    1349             : {
    1350             :         if (q->limits.max_discard_sectors && q->limits.discard_zeroes_data == 1)
    1351             :                 return 1;
    1352             : 
    1353             :         return 0;
    1354             : }
    1355             : 
    1356             : static inline unsigned int bdev_discard_zeroes_data(struct block_device *bdev)
    1357             : {
    1358             :         return queue_discard_zeroes_data(bdev_get_queue(bdev));
    1359             : }
    1360             : 
    1361             : static inline unsigned int bdev_write_same(struct block_device *bdev)
    1362             : {
    1363             :         struct request_queue *q = bdev_get_queue(bdev);
    1364             : 
    1365             :         if (q)
    1366             :                 return q->limits.max_write_same_sectors;
    1367             : 
    1368             :         return 0;
    1369             : }
    1370             : 
    1371             : static inline int queue_dma_alignment(struct request_queue *q)
    1372             : {
    1373             :         return q ? q->dma_alignment : 511;
    1374             : }
    1375             : 
    1376             : static inline int blk_rq_aligned(struct request_queue *q, unsigned long addr,
    1377             :                                  unsigned int len)
    1378             : {
    1379             :         unsigned int alignment = queue_dma_alignment(q) | q->dma_pad_mask;
    1380             :         return !(addr & alignment) && !(len & alignment);
    1381             : }
    1382             : 
    1383             : /* assumes size > 256 */
    1384             : static inline unsigned int blksize_bits(unsigned int size)
    1385             : {
    1386             :         unsigned int bits = 8;
    1387             :         do {
    1388        1768 :                 bits++;
    1389        1768 :                 size >>= 1;
    1390        1768 :         } while (size > 256);
    1391             :         return bits;
    1392             : }
    1393             : 
    1394             : static inline unsigned int block_size(struct block_device *bdev)
    1395             : {
    1396             :         return bdev->bd_block_size;
    1397             : }
    1398             : 
    1399             : static inline bool queue_flush_queueable(struct request_queue *q)
    1400             : {
    1401             :         return !q->flush_not_queueable;
    1402             : }
    1403             : 
    1404             : typedef struct {struct page *v;} Sector;
    1405             : 
    1406             : unsigned char *read_dev_sector(struct block_device *, sector_t, Sector *);
    1407             : 
    1408             : static inline void put_dev_sector(Sector p)
    1409             : {
    1410             :         page_cache_release(p.v);
    1411             : }
    1412             : 
    1413             : struct work_struct;
    1414             : int kblockd_schedule_work(struct work_struct *work);
    1415             : int kblockd_schedule_delayed_work(struct delayed_work *dwork, unsigned long delay);
    1416             : int kblockd_schedule_delayed_work_on(int cpu, struct delayed_work *dwork, unsigned long delay);
    1417             : 
    1418             : #ifdef CONFIG_BLK_CGROUP
    1419             : /*
    1420             :  * This should not be using sched_clock(). A real patch is in progress
    1421             :  * to fix this up, until that is in place we need to disable preemption
    1422             :  * around sched_clock() in this function and set_io_start_time_ns().
    1423             :  */
    1424             : static inline void set_start_time_ns(struct request *req)
    1425             : {
    1426             :         preempt_disable();
    1427             :         req->start_time_ns = sched_clock();
    1428             :         preempt_enable();
    1429             : }
    1430             : 
    1431             : static inline void set_io_start_time_ns(struct request *req)
    1432             : {
    1433             :         preempt_disable();
    1434             :         req->io_start_time_ns = sched_clock();
    1435             :         preempt_enable();
    1436             : }
    1437             : 
    1438             : static inline uint64_t rq_start_time_ns(struct request *req)
    1439             : {
    1440             :         return req->start_time_ns;
    1441             : }
    1442             : 
    1443             : static inline uint64_t rq_io_start_time_ns(struct request *req)
    1444             : {
    1445             :         return req->io_start_time_ns;
    1446             : }
    1447             : #else
    1448             : static inline void set_start_time_ns(struct request *req) {}
    1449             : static inline void set_io_start_time_ns(struct request *req) {}
    1450             : static inline uint64_t rq_start_time_ns(struct request *req)
    1451             : {
    1452             :         return 0;
    1453             : }
    1454             : static inline uint64_t rq_io_start_time_ns(struct request *req)
    1455             : {
    1456             :         return 0;
    1457             : }
    1458             : #endif
    1459             : 
    1460             : #define MODULE_ALIAS_BLOCKDEV(major,minor) \
    1461             :         MODULE_ALIAS("block-major-" __stringify(major) "-" __stringify(minor))
    1462             : #define MODULE_ALIAS_BLOCKDEV_MAJOR(major) \
    1463             :         MODULE_ALIAS("block-major-" __stringify(major) "-*")
    1464             : 
    1465             : #if defined(CONFIG_BLK_DEV_INTEGRITY)
    1466             : 
    1467             : #define INTEGRITY_FLAG_READ     2       /* verify data integrity on read */
    1468             : #define INTEGRITY_FLAG_WRITE    4       /* generate data integrity on write */
    1469             : 
    1470             : struct blk_integrity_exchg {
    1471             :         void                    *prot_buf;
    1472             :         void                    *data_buf;
    1473             :         sector_t                sector;
    1474             :         unsigned int            data_size;
    1475             :         unsigned short          sector_size;
    1476             :         const char              *disk_name;
    1477             : };
    1478             : 
    1479             : typedef void (integrity_gen_fn) (struct blk_integrity_exchg *);
    1480             : typedef int (integrity_vrfy_fn) (struct blk_integrity_exchg *);
    1481             : typedef void (integrity_set_tag_fn) (void *, void *, unsigned int);
    1482             : typedef void (integrity_get_tag_fn) (void *, void *, unsigned int);
    1483             : 
    1484             : struct blk_integrity {
    1485             :         integrity_gen_fn        *generate_fn;
    1486             :         integrity_vrfy_fn       *verify_fn;
    1487             :         integrity_set_tag_fn    *set_tag_fn;
    1488             :         integrity_get_tag_fn    *get_tag_fn;
    1489             : 
    1490             :         unsigned short          flags;
    1491             :         unsigned short          tuple_size;
    1492             :         unsigned short          sector_size;
    1493             :         unsigned short          tag_size;
    1494             : 
    1495             :         const char              *name;
    1496             : 
    1497             :         struct kobject          kobj;
    1498             : };
    1499             : 
    1500             : extern bool blk_integrity_is_initialized(struct gendisk *);
    1501             : extern int blk_integrity_register(struct gendisk *, struct blk_integrity *);
    1502             : extern void blk_integrity_unregister(struct gendisk *);
    1503             : extern int blk_integrity_compare(struct gendisk *, struct gendisk *);
    1504             : extern int blk_rq_map_integrity_sg(struct request_queue *, struct bio *,
    1505             :                                    struct scatterlist *);
    1506             : extern int blk_rq_count_integrity_sg(struct request_queue *, struct bio *);
    1507             : extern int blk_integrity_merge_rq(struct request_queue *, struct request *,
    1508             :                                   struct request *);
    1509             : extern int blk_integrity_merge_bio(struct request_queue *, struct request *,
    1510             :                                    struct bio *);
    1511             : 
    1512             : static inline
    1513             : struct blk_integrity *bdev_get_integrity(struct block_device *bdev)
    1514             : {
    1515             :         return bdev->bd_disk->integrity;
    1516             : }
    1517             : 
    1518             : static inline struct blk_integrity *blk_get_integrity(struct gendisk *disk)
    1519             : {
    1520             :         return disk->integrity;
    1521             : }
    1522             : 
    1523             : static inline int blk_integrity_rq(struct request *rq)
    1524             : {
    1525             :         if (rq->bio == NULL)
    1526             :                 return 0;
    1527             : 
    1528             :         return bio_integrity(rq->bio);
    1529             : }
    1530             : 
    1531             : static inline void blk_queue_max_integrity_segments(struct request_queue *q,
    1532             :                                                     unsigned int segs)
    1533             : {
    1534             :         q->limits.max_integrity_segments = segs;
    1535             : }
    1536             : 
    1537             : static inline unsigned short
    1538             : queue_max_integrity_segments(struct request_queue *q)
    1539             : {
    1540             :         return q->limits.max_integrity_segments;
    1541             : }
    1542             : 
    1543             : #else /* CONFIG_BLK_DEV_INTEGRITY */
    1544             : 
    1545             : struct bio;
    1546             : struct block_device;
    1547             : struct gendisk;
    1548             : struct blk_integrity;
    1549             : 
    1550             : static inline int blk_integrity_rq(struct request *rq)
    1551             : {
    1552             :         return 0;
    1553             : }
    1554             : static inline int blk_rq_count_integrity_sg(struct request_queue *q,
    1555             :                                             struct bio *b)
    1556             : {
    1557             :         return 0;
    1558             : }
    1559             : static inline int blk_rq_map_integrity_sg(struct request_queue *q,
    1560             :                                           struct bio *b,
    1561             :                                           struct scatterlist *s)
    1562             : {
    1563             :         return 0;
    1564             : }
    1565             : static inline struct blk_integrity *bdev_get_integrity(struct block_device *b)
    1566             : {
    1567             :         return 0;
    1568             : }
    1569             : static inline struct blk_integrity *blk_get_integrity(struct gendisk *disk)
    1570             : {
    1571             :         return NULL;
    1572             : }
    1573             : static inline int blk_integrity_compare(struct gendisk *a, struct gendisk *b)
    1574             : {
    1575             :         return 0;
    1576             : }
    1577             : static inline int blk_integrity_register(struct gendisk *d,
    1578             :                                          struct blk_integrity *b)
    1579             : {
    1580             :         return 0;
    1581             : }
    1582             : static inline void blk_integrity_unregister(struct gendisk *d)
    1583             : {
    1584             : }
    1585             : static inline void blk_queue_max_integrity_segments(struct request_queue *q,
    1586             :                                                     unsigned int segs)
    1587             : {
    1588             : }
    1589             : static inline unsigned short queue_max_integrity_segments(struct request_queue *q)
    1590             : {
    1591             :         return 0;
    1592             : }
    1593             : static inline int blk_integrity_merge_rq(struct request_queue *rq,
    1594             :                                          struct request *r1,
    1595             :                                          struct request *r2)
    1596             : {
    1597             :         return 0;
    1598             : }
    1599             : static inline int blk_integrity_merge_bio(struct request_queue *rq,
    1600             :                                           struct request *r,
    1601             :                                           struct bio *b)
    1602             : {
    1603             :         return 0;
    1604             : }
    1605             : static inline bool blk_integrity_is_initialized(struct gendisk *g)
    1606             : {
    1607             :         return 0;
    1608             : }
    1609             : 
    1610             : #endif /* CONFIG_BLK_DEV_INTEGRITY */
    1611             : 
    1612             : struct block_device_operations {
    1613             :         int (*open) (struct block_device *, fmode_t);
    1614             :         void (*release) (struct gendisk *, fmode_t);
    1615             :         int (*rw_page)(struct block_device *, sector_t, struct page *, int rw);
    1616             :         int (*ioctl) (struct block_device *, fmode_t, unsigned, unsigned long);
    1617             :         int (*compat_ioctl) (struct block_device *, fmode_t, unsigned, unsigned long);
    1618             :         int (*direct_access) (struct block_device *, sector_t,
    1619             :                                                 void **, unsigned long *);
    1620             :         unsigned int (*check_events) (struct gendisk *disk,
    1621             :                                       unsigned int clearing);
    1622             :         /* ->media_changed() is DEPRECATED, use ->check_events() instead */
    1623             :         int (*media_changed) (struct gendisk *);
    1624             :         void (*unlock_native_capacity) (struct gendisk *);
    1625             :         int (*revalidate_disk) (struct gendisk *);
    1626             :         int (*getgeo)(struct block_device *, struct hd_geometry *);
    1627             :         /* this callback is with swap_lock and sometimes page table lock held */
    1628             :         void (*swap_slot_free_notify) (struct block_device *, unsigned long);
    1629             :         struct module *owner;
    1630             : };
    1631             : 
    1632             : extern int __blkdev_driver_ioctl(struct block_device *, fmode_t, unsigned int,
    1633             :                                  unsigned long);
    1634             : extern int bdev_read_page(struct block_device *, sector_t, struct page *);
    1635             : extern int bdev_write_page(struct block_device *, sector_t, struct page *,
    1636             :                                                 struct writeback_control *);
    1637             : #else /* CONFIG_BLOCK */
    1638             : 
    1639             : struct block_device;
    1640             : 
    1641             : /*
    1642             :  * stubs for when the block layer is configured out
    1643             :  */
    1644             : #define buffer_heads_over_limit 0
    1645             : 
    1646             : static inline long nr_blockdev_pages(void)
    1647             : {
    1648             :         return 0;
    1649             : }
    1650             : 
    1651             : struct blk_plug {
    1652             : };
    1653             : 
    1654             : static inline void blk_start_plug(struct blk_plug *plug)
    1655             : {
    1656             : }
    1657             : 
    1658             : static inline void blk_finish_plug(struct blk_plug *plug)
    1659             : {
    1660             : }
    1661             : 
    1662             : static inline void blk_flush_plug(struct task_struct *task)
    1663             : {
    1664             : }
    1665             : 
    1666             : static inline void blk_schedule_flush_plug(struct task_struct *task)
    1667             : {
    1668             : }
    1669             : 
    1670             : 
    1671             : static inline bool blk_needs_flush_plug(struct task_struct *tsk)
    1672             : {
    1673             :         return false;
    1674             : }
    1675             : 
    1676             : static inline int blkdev_issue_flush(struct block_device *bdev, gfp_t gfp_mask,
    1677             :                                      sector_t *error_sector)
    1678             : {
    1679             :         return 0;
    1680             : }
    1681             : 
    1682             : #endif /* CONFIG_BLOCK */
    1683             : 
    1684             : #endif

Generated by: LCOV version 1.10