linux/include/linux/blkdev.h
<<
>>
Prefs
   1#ifndef _LINUX_BLKDEV_H
   2#define _LINUX_BLKDEV_H
   3
   4#ifdef CONFIG_BLOCK
   5
   6#include <linux/sched.h>
   7#include <linux/major.h>
   8#include <linux/genhd.h>
   9#include <linux/list.h>
  10#include <linux/timer.h>
  11#include <linux/workqueue.h>
  12#include <linux/pagemap.h>
  13#include <linux/backing-dev.h>
  14#include <linux/wait.h>
  15#include <linux/mempool.h>
  16#include <linux/bio.h>
  17#include <linux/stringify.h>
  18#include <linux/gfp.h>
  19#include <linux/bsg.h>
  20#include <linux/smp.h>
  21
  22#include <asm/scatterlist.h>
  23
  24struct module;
  25struct scsi_ioctl_command;
  26
  27struct request_queue;
  28struct elevator_queue;
  29struct request_pm_state;
  30struct blk_trace;
  31struct request;
  32struct sg_io_hdr;
  33struct bsg_job;
  34
  35#define BLKDEV_MIN_RQ   4
  36#define BLKDEV_MAX_RQ   128     /* Default maximum */
  37
  38struct request;
  39typedef void (rq_end_io_fn)(struct request *, int);
  40
  41struct request_list {
  42        /*
  43         * count[], starved[], and wait[] are indexed by
  44         * BLK_RW_SYNC/BLK_RW_ASYNC
  45         */
  46        int count[2];
  47        int starved[2];
  48        int elvpriv;
  49        mempool_t *rq_pool;
  50        wait_queue_head_t wait[2];
  51};
  52
  53/*
  54 * request command types
  55 */
  56enum rq_cmd_type_bits {
  57        REQ_TYPE_FS             = 1,    /* fs request */
  58        REQ_TYPE_BLOCK_PC,              /* scsi command */
  59        REQ_TYPE_SENSE,                 /* sense request */
  60        REQ_TYPE_PM_SUSPEND,            /* suspend request */
  61        REQ_TYPE_PM_RESUME,             /* resume request */
  62        REQ_TYPE_PM_SHUTDOWN,           /* shutdown request */
  63        REQ_TYPE_SPECIAL,               /* driver defined type */
  64        /*
  65         * for ATA/ATAPI devices. this really doesn't belong here, ide should
  66         * use REQ_TYPE_SPECIAL and use rq->cmd[0] with the range of driver
  67         * private REQ_LB opcodes to differentiate what type of request this is
  68         */
  69        REQ_TYPE_ATA_TASKFILE,
  70        REQ_TYPE_ATA_PC,
  71};
  72
  73#define BLK_MAX_CDB     16
  74
  75/*
  76 * try to put the fields that are referenced together in the same cacheline.
  77 * if you modify this structure, be sure to check block/blk-core.c:blk_rq_init()
  78 * as well!
  79 */
  80struct request {
  81        struct list_head queuelist;
  82        struct call_single_data csd;
  83
  84        struct request_queue *q;
  85
  86        unsigned int cmd_flags;
  87        enum rq_cmd_type_bits cmd_type;
  88        unsigned long atomic_flags;
  89
  90        int cpu;
  91
  92        /* the following two fields are internal, NEVER access directly */
  93        unsigned int __data_len;        /* total data len */
  94        sector_t __sector;              /* sector cursor */
  95
  96        struct bio *bio;
  97        struct bio *biotail;
  98
  99        struct hlist_node hash; /* merge hash */
 100        /*
 101         * The rb_node is only used inside the io scheduler, requests
 102         * are pruned when moved to the dispatch queue. So let the
 103         * completion_data share space with the rb_node.
 104         */
 105        union {
 106                struct rb_node rb_node; /* sort/lookup */
 107                void *completion_data;
 108        };
 109
 110        /*
 111         * Three pointers are available for the IO schedulers, if they need
 112         * more they have to dynamically allocate it.  Flush requests are
 113         * never put on the IO scheduler. So let the flush fields share
 114         * space with the three elevator_private pointers.
 115         */
 116        union {
 117                void *elevator_private[3];
 118                struct {
 119                        unsigned int            seq;
 120                        struct list_head        list;
 121                        rq_end_io_fn            *saved_end_io;
 122                } flush;
 123        };
 124
 125        struct gendisk *rq_disk;
 126        struct hd_struct *part;
 127        unsigned long start_time;
 128#ifdef CONFIG_BLK_CGROUP
 129        unsigned long long start_time_ns;
 130        unsigned long long io_start_time_ns;    /* when passed to hardware */
 131#endif
 132        /* Number of scatter-gather DMA addr+len pairs after
 133         * physical address coalescing is performed.
 134         */
 135        unsigned short nr_phys_segments;
 136#if defined(CONFIG_BLK_DEV_INTEGRITY)
 137        unsigned short nr_integrity_segments;
 138#endif
 139
 140        unsigned short ioprio;
 141
 142        int ref_count;
 143
 144        void *special;          /* opaque pointer available for LLD use */
 145        char *buffer;           /* kaddr of the current segment if available */
 146
 147        int tag;
 148        int errors;
 149
 150        /*
 151         * when request is used as a packet command carrier
 152         */
 153        unsigned char __cmd[BLK_MAX_CDB];
 154        unsigned char *cmd;
 155        unsigned short cmd_len;
 156
 157        unsigned int extra_len; /* length of alignment and padding */
 158        unsigned int sense_len;
 159        unsigned int resid_len; /* residual count */
 160        void *sense;
 161
 162        unsigned long deadline;
 163        struct list_head timeout_list;
 164        unsigned int timeout;
 165        int retries;
 166
 167        /*
 168         * completion callback.
 169         */
 170        rq_end_io_fn *end_io;
 171        void *end_io_data;
 172
 173        /* for bidi */
 174        struct request *next_rq;
 175};
 176
 177static inline unsigned short req_get_ioprio(struct request *req)
 178{
 179        return req->ioprio;
 180}
 181
 182/*
 183 * State information carried for REQ_TYPE_PM_SUSPEND and REQ_TYPE_PM_RESUME
 184 * requests. Some step values could eventually be made generic.
 185 */
 186struct request_pm_state
 187{
 188        /* PM state machine step value, currently driver specific */
 189        int     pm_step;
 190        /* requested PM state value (S1, S2, S3, S4, ...) */
 191        u32     pm_state;
 192        void*   data;           /* for driver use */
 193};
 194
 195#include <linux/elevator.h>
 196
 197typedef void (request_fn_proc) (struct request_queue *q);
 198typedef void (make_request_fn) (struct request_queue *q, struct bio *bio);
 199typedef int (prep_rq_fn) (struct request_queue *, struct request *);
 200typedef void (unprep_rq_fn) (struct request_queue *, struct request *);
 201
 202struct bio_vec;
 203struct bvec_merge_data {
 204        struct block_device *bi_bdev;
 205        sector_t bi_sector;
 206        unsigned bi_size;
 207        unsigned long bi_rw;
 208};
 209typedef int (merge_bvec_fn) (struct request_queue *, struct bvec_merge_data *,
 210                             struct bio_vec *);
 211typedef void (softirq_done_fn)(struct request *);
 212typedef int (dma_drain_needed_fn)(struct request *);
 213typedef int (lld_busy_fn) (struct request_queue *q);
 214typedef int (bsg_job_fn) (struct bsg_job *);
 215
 216enum blk_eh_timer_return {
 217        BLK_EH_NOT_HANDLED,
 218        BLK_EH_HANDLED,
 219        BLK_EH_RESET_TIMER,
 220};
 221
 222typedef enum blk_eh_timer_return (rq_timed_out_fn)(struct request *);
 223
 224enum blk_queue_state {
 225        Queue_down,
 226        Queue_up,
 227};
 228
 229struct blk_queue_tag {
 230        struct request **tag_index;     /* map of busy tags */
 231        unsigned long *tag_map;         /* bit map of free/busy tags */
 232        int busy;                       /* current depth */
 233        int max_depth;                  /* what we will send to device */
 234        int real_max_depth;             /* what the array can hold */
 235        atomic_t refcnt;                /* map can be shared */
 236};
 237
 238#define BLK_SCSI_MAX_CMDS       (256)
 239#define BLK_SCSI_CMD_PER_LONG   (BLK_SCSI_MAX_CMDS / (sizeof(long) * 8))
 240
 241struct queue_limits {
 242        unsigned long           bounce_pfn;
 243        unsigned long           seg_boundary_mask;
 244
 245        unsigned int            max_hw_sectors;
 246        unsigned int            max_sectors;
 247        unsigned int            max_segment_size;
 248        unsigned int            physical_block_size;
 249        unsigned int            alignment_offset;
 250        unsigned int            io_min;
 251        unsigned int            io_opt;
 252        unsigned int            max_discard_sectors;
 253        unsigned int            discard_granularity;
 254        unsigned int            discard_alignment;
 255
 256        unsigned short          logical_block_size;
 257        unsigned short          max_segments;
 258        unsigned short          max_integrity_segments;
 259
 260        unsigned char           misaligned;
 261        unsigned char           discard_misaligned;
 262        unsigned char           cluster;
 263        unsigned char           discard_zeroes_data;
 264};
 265
 266struct request_queue {
 267        /*
 268         * Together with queue_head for cacheline sharing
 269         */
 270        struct list_head        queue_head;
 271        struct request          *last_merge;
 272        struct elevator_queue   *elevator;
 273
 274        /*
 275         * the queue request freelist, one for reads and one for writes
 276         */
 277        struct request_list     rq;
 278
 279        request_fn_proc         *request_fn;
 280        make_request_fn         *make_request_fn;
 281        prep_rq_fn              *prep_rq_fn;
 282        unprep_rq_fn            *unprep_rq_fn;
 283        merge_bvec_fn           *merge_bvec_fn;
 284        softirq_done_fn         *softirq_done_fn;
 285        rq_timed_out_fn         *rq_timed_out_fn;
 286        dma_drain_needed_fn     *dma_drain_needed;
 287        lld_busy_fn             *lld_busy_fn;
 288
 289        /*
 290         * Dispatch queue sorting
 291         */
 292        sector_t                end_sector;
 293        struct request          *boundary_rq;
 294
 295        /*
 296         * Delayed queue handling
 297         */
 298        struct delayed_work     delay_work;
 299
 300        struct backing_dev_info backing_dev_info;
 301
 302        /*
 303         * The queue owner gets to use this for whatever they like.
 304         * ll_rw_blk doesn't touch it.
 305         */
 306        void                    *queuedata;
 307
 308        /*
 309         * various queue flags, see QUEUE_* below
 310         */
 311        unsigned long           queue_flags;
 312
 313        /*
 314         * queue needs bounce pages for pages above this limit
 315         */
 316        gfp_t                   bounce_gfp;
 317
 318        /*
 319         * protects queue structures from reentrancy. ->__queue_lock should
 320         * _never_ be used directly, it is queue private. always use
 321         * ->queue_lock.
 322         */
 323        spinlock_t              __queue_lock;
 324        spinlock_t              *queue_lock;
 325
 326        /*
 327         * queue kobject
 328         */
 329        struct kobject kobj;
 330
 331        /*
 332         * queue settings
 333         */
 334        unsigned long           nr_requests;    /* Max # of requests */
 335        unsigned int            nr_congestion_on;
 336        unsigned int            nr_congestion_off;
 337        unsigned int            nr_batching;
 338
 339        unsigned int            dma_drain_size;
 340        void                    *dma_drain_buffer;
 341        unsigned int            dma_pad_mask;
 342        unsigned int            dma_alignment;
 343
 344        struct blk_queue_tag    *queue_tags;
 345        struct list_head        tag_busy_list;
 346
 347        unsigned int            nr_sorted;
 348        unsigned int            in_flight[2];
 349
 350        unsigned int            rq_timeout;
 351        struct timer_list       timeout;
 352        struct list_head        timeout_list;
 353
 354        struct queue_limits     limits;
 355
 356        /*
 357         * sg stuff
 358         */
 359        unsigned int            sg_timeout;
 360        unsigned int            sg_reserved_size;
 361        int                     node;
 362#ifdef CONFIG_BLK_DEV_IO_TRACE
 363        struct blk_trace        *blk_trace;
 364#endif
 365        /*
 366         * for flush operations
 367         */
 368        unsigned int            flush_flags;
 369        unsigned int            flush_not_queueable:1;
 370        unsigned int            flush_queue_delayed:1;
 371        unsigned int            flush_pending_idx:1;
 372        unsigned int            flush_running_idx:1;
 373        unsigned long           flush_pending_since;
 374        struct list_head        flush_queue[2];
 375        struct list_head        flush_data_in_flight;
 376        struct request          flush_rq;
 377
 378        struct mutex            sysfs_lock;
 379
 380#if defined(CONFIG_BLK_DEV_BSG)
 381        bsg_job_fn              *bsg_job_fn;
 382        int                     bsg_job_size;
 383        struct bsg_class_device bsg_dev;
 384#endif
 385
 386#ifdef CONFIG_BLK_DEV_THROTTLING
 387        /* Throttle data */
 388        struct throtl_data *td;
 389#endif
 390};
 391
 392#define QUEUE_FLAG_QUEUED       1       /* uses generic tag queueing */
 393#define QUEUE_FLAG_STOPPED      2       /* queue is stopped */
 394#define QUEUE_FLAG_SYNCFULL     3       /* read queue has been filled */
 395#define QUEUE_FLAG_ASYNCFULL    4       /* write queue has been filled */
 396#define QUEUE_FLAG_DEAD         5       /* queue being torn down */
 397#define QUEUE_FLAG_ELVSWITCH    6       /* don't use elevator, just do FIFO */
 398#define QUEUE_FLAG_BIDI         7       /* queue supports bidi requests */
 399#define QUEUE_FLAG_NOMERGES     8       /* disable merge attempts */
 400#define QUEUE_FLAG_SAME_COMP    9       /* complete on same CPU-group */
 401#define QUEUE_FLAG_FAIL_IO     10       /* fake timeout */
 402#define QUEUE_FLAG_STACKABLE   11       /* supports request stacking */
 403#define QUEUE_FLAG_NONROT      12       /* non-rotational device (SSD) */
 404#define QUEUE_FLAG_VIRT        QUEUE_FLAG_NONROT /* paravirt device */
 405#define QUEUE_FLAG_IO_STAT     13       /* do IO stats */
 406#define QUEUE_FLAG_DISCARD     14       /* supports DISCARD */
 407#define QUEUE_FLAG_NOXMERGES   15       /* No extended merges */
 408#define QUEUE_FLAG_ADD_RANDOM  16       /* Contributes to random pool */
 409#define QUEUE_FLAG_SECDISCARD  17       /* supports SECDISCARD */
 410#define QUEUE_FLAG_SAME_FORCE  18       /* force complete on same CPU */
 411
 412#define QUEUE_FLAG_DEFAULT      ((1 << QUEUE_FLAG_IO_STAT) |            \
 413                                 (1 << QUEUE_FLAG_STACKABLE)    |       \
 414                                 (1 << QUEUE_FLAG_SAME_COMP)    |       \
 415                                 (1 << QUEUE_FLAG_ADD_RANDOM))
 416
 417static inline int queue_is_locked(struct request_queue *q)
 418{
 419#ifdef CONFIG_SMP
 420        spinlock_t *lock = q->queue_lock;
 421        return lock && spin_is_locked(lock);
 422#else
 423        return 1;
 424#endif
 425}
 426
 427static inline void queue_flag_set_unlocked(unsigned int flag,
 428                                           struct request_queue *q)
 429{
 430        __set_bit(flag, &q->queue_flags);
 431}
 432
 433static inline int queue_flag_test_and_clear(unsigned int flag,
 434                                            struct request_queue *q)
 435{
 436        WARN_ON_ONCE(!queue_is_locked(q));
 437
 438        if (test_bit(flag, &q->queue_flags)) {
 439                __clear_bit(flag, &q->queue_flags);
 440                return 1;
 441        }
 442
 443        return 0;
 444}
 445
 446static inline int queue_flag_test_and_set(unsigned int flag,
 447                                          struct request_queue *q)
 448{
 449        WARN_ON_ONCE(!queue_is_locked(q));
 450
 451        if (!test_bit(flag, &q->queue_flags)) {
 452                __set_bit(flag, &q->queue_flags);
 453                return 0;
 454        }
 455
 456        return 1;
 457}
 458
 459static inline void queue_flag_set(unsigned int flag, struct request_queue *q)
 460{
 461        WARN_ON_ONCE(!queue_is_locked(q));
 462        __set_bit(flag, &q->queue_flags);
 463}
 464
 465static inline void queue_flag_clear_unlocked(unsigned int flag,
 466                                             struct request_queue *q)
 467{
 468        __clear_bit(flag, &q->queue_flags);
 469}
 470
 471static inline int queue_in_flight(struct request_queue *q)
 472{
 473        return q->in_flight[0] + q->in_flight[1];
 474}
 475
 476static inline void queue_flag_clear(unsigned int flag, struct request_queue *q)
 477{
 478        WARN_ON_ONCE(!queue_is_locked(q));
 479        __clear_bit(flag, &q->queue_flags);
 480}
 481
 482#define blk_queue_tagged(q)     test_bit(QUEUE_FLAG_QUEUED, &(q)->queue_flags)
 483#define blk_queue_stopped(q)    test_bit(QUEUE_FLAG_STOPPED, &(q)->queue_flags)
 484#define blk_queue_nomerges(q)   test_bit(QUEUE_FLAG_NOMERGES, &(q)->queue_flags)
 485#define blk_queue_noxmerges(q)  \
 486        test_bit(QUEUE_FLAG_NOXMERGES, &(q)->queue_flags)
 487#define blk_queue_nonrot(q)     test_bit(QUEUE_FLAG_NONROT, &(q)->queue_flags)
 488#define blk_queue_io_stat(q)    test_bit(QUEUE_FLAG_IO_STAT, &(q)->queue_flags)
 489#define blk_queue_add_random(q) test_bit(QUEUE_FLAG_ADD_RANDOM, &(q)->queue_flags)
 490#define blk_queue_stackable(q)  \
 491        test_bit(QUEUE_FLAG_STACKABLE, &(q)->queue_flags)
 492#define blk_queue_discard(q)    test_bit(QUEUE_FLAG_DISCARD, &(q)->queue_flags)
 493#define blk_queue_secdiscard(q) (blk_queue_discard(q) && \
 494        test_bit(QUEUE_FLAG_SECDISCARD, &(q)->queue_flags))
 495
 496#define blk_noretry_request(rq) \
 497        ((rq)->cmd_flags & (REQ_FAILFAST_DEV|REQ_FAILFAST_TRANSPORT| \
 498                             REQ_FAILFAST_DRIVER))
 499
 500#define blk_account_rq(rq) \
 501        (((rq)->cmd_flags & REQ_STARTED) && \
 502         ((rq)->cmd_type == REQ_TYPE_FS || \
 503          ((rq)->cmd_flags & REQ_DISCARD)))
 504
 505#define blk_pm_request(rq)      \
 506        ((rq)->cmd_type == REQ_TYPE_PM_SUSPEND || \
 507         (rq)->cmd_type == REQ_TYPE_PM_RESUME)
 508
 509#define blk_rq_cpu_valid(rq)    ((rq)->cpu != -1)
 510#define blk_bidi_rq(rq)         ((rq)->next_rq != NULL)
 511/* rq->queuelist of dequeued request must be list_empty() */
 512#define blk_queued_rq(rq)       (!list_empty(&(rq)->queuelist))
 513
 514#define list_entry_rq(ptr)      list_entry((ptr), struct request, queuelist)
 515
 516#define rq_data_dir(rq)         ((rq)->cmd_flags & 1)
 517
 518static inline unsigned int blk_queue_cluster(struct request_queue *q)
 519{
 520        return q->limits.cluster;
 521}
 522
 523/*
 524 * We regard a request as sync, if either a read or a sync write
 525 */
 526static inline bool rw_is_sync(unsigned int rw_flags)
 527{
 528        return !(rw_flags & REQ_WRITE) || (rw_flags & REQ_SYNC);
 529}
 530
 531static inline bool rq_is_sync(struct request *rq)
 532{
 533        return rw_is_sync(rq->cmd_flags);
 534}
 535
 536static inline int blk_queue_full(struct request_queue *q, int sync)
 537{
 538        if (sync)
 539                return test_bit(QUEUE_FLAG_SYNCFULL, &q->queue_flags);
 540        return test_bit(QUEUE_FLAG_ASYNCFULL, &q->queue_flags);
 541}
 542
 543static inline void blk_set_queue_full(struct request_queue *q, int sync)
 544{
 545        if (sync)
 546                queue_flag_set(QUEUE_FLAG_SYNCFULL, q);
 547        else
 548                queue_flag_set(QUEUE_FLAG_ASYNCFULL, q);
 549}
 550
 551static inline void blk_clear_queue_full(struct request_queue *q, int sync)
 552{
 553        if (sync)
 554                queue_flag_clear(QUEUE_FLAG_SYNCFULL, q);
 555        else
 556                queue_flag_clear(QUEUE_FLAG_ASYNCFULL, q);
 557}
 558
 559
 560/*
 561 * mergeable request must not have _NOMERGE or _BARRIER bit set, nor may
 562 * it already be started by driver.
 563 */
 564#define RQ_NOMERGE_FLAGS        \
 565        (REQ_NOMERGE | REQ_STARTED | REQ_SOFTBARRIER | REQ_FLUSH | REQ_FUA)
 566#define rq_mergeable(rq)        \
 567        (!((rq)->cmd_flags & RQ_NOMERGE_FLAGS) && \
 568         (((rq)->cmd_flags & REQ_DISCARD) || \
 569          (rq)->cmd_type == REQ_TYPE_FS))
 570
 571/*
 572 * q->prep_rq_fn return values
 573 */
 574#define BLKPREP_OK              0       /* serve it */
 575#define BLKPREP_KILL            1       /* fatal error, kill */
 576#define BLKPREP_DEFER           2       /* leave on queue */
 577
 578extern unsigned long blk_max_low_pfn, blk_max_pfn;
 579
 580/*
 581 * standard bounce addresses:
 582 *
 583 * BLK_BOUNCE_HIGH      : bounce all highmem pages
 584 * BLK_BOUNCE_ANY       : don't bounce anything
 585 * BLK_BOUNCE_ISA       : bounce pages above ISA DMA boundary
 586 */
 587
 588#if BITS_PER_LONG == 32
 589#define BLK_BOUNCE_HIGH         ((u64)blk_max_low_pfn << PAGE_SHIFT)
 590#else
 591#define BLK_BOUNCE_HIGH         -1ULL
 592#endif
 593#define BLK_BOUNCE_ANY          (-1ULL)
 594#define BLK_BOUNCE_ISA          (DMA_BIT_MASK(24))
 595
 596/*
 597 * default timeout for SG_IO if none specified
 598 */
 599#define BLK_DEFAULT_SG_TIMEOUT  (60 * HZ)
 600#define BLK_MIN_SG_TIMEOUT      (7 * HZ)
 601
 602#ifdef CONFIG_BOUNCE
 603extern int init_emergency_isa_pool(void);
 604extern void blk_queue_bounce(struct request_queue *q, struct bio **bio);
 605#else
 606static inline int init_emergency_isa_pool(void)
 607{
 608        return 0;
 609}
 610static inline void blk_queue_bounce(struct request_queue *q, struct bio **bio)
 611{
 612}
 613#endif /* CONFIG_MMU */
 614
 615struct rq_map_data {
 616        struct page **pages;
 617        int page_order;
 618        int nr_entries;
 619        unsigned long offset;
 620        int null_mapped;
 621        int from_user;
 622};
 623
 624struct req_iterator {
 625        int i;
 626        struct bio *bio;
 627};
 628
 629/* This should not be used directly - use rq_for_each_segment */
 630#define for_each_bio(_bio)              \
 631        for (; _bio; _bio = _bio->bi_next)
 632#define __rq_for_each_bio(_bio, rq)     \
 633        if ((rq->bio))                  \
 634                for (_bio = (rq)->bio; _bio; _bio = _bio->bi_next)
 635
 636#define rq_for_each_segment(bvl, _rq, _iter)                    \
 637        __rq_for_each_bio(_iter.bio, _rq)                       \
 638                bio_for_each_segment(bvl, _iter.bio, _iter.i)
 639
 640#define rq_iter_last(rq, _iter)                                 \
 641                (_iter.bio->bi_next == NULL && _iter.i == _iter.bio->bi_vcnt-1)
 642
 643#ifndef ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE
 644# error "You should define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE for your platform"
 645#endif
 646#if ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE
 647extern void rq_flush_dcache_pages(struct request *rq);
 648#else
 649static inline void rq_flush_dcache_pages(struct request *rq)
 650{
 651}
 652#endif
 653
 654extern int blk_register_queue(struct gendisk *disk);
 655extern void blk_unregister_queue(struct gendisk *disk);
 656extern void generic_make_request(struct bio *bio);
 657extern void blk_rq_init(struct request_queue *q, struct request *rq);
 658extern void blk_put_request(struct request *);
 659extern void __blk_put_request(struct request_queue *, struct request *);
 660extern struct request *blk_get_request(struct request_queue *, int, gfp_t);
 661extern struct request *blk_make_request(struct request_queue *, struct bio *,
 662                                        gfp_t);
 663extern void blk_insert_request(struct request_queue *, struct request *, int, void *);
 664extern void blk_requeue_request(struct request_queue *, struct request *);
 665extern void blk_add_request_payload(struct request *rq, struct page *page,
 666                unsigned int len);
 667extern int blk_rq_check_limits(struct request_queue *q, struct request *rq);
 668extern int blk_lld_busy(struct request_queue *q);
 669extern int blk_rq_prep_clone(struct request *rq, struct request *rq_src,
 670                             struct bio_set *bs, gfp_t gfp_mask,
 671                             int (*bio_ctr)(struct bio *, struct bio *, void *),
 672                             void *data);
 673extern void blk_rq_unprep_clone(struct request *rq);
 674extern int blk_insert_cloned_request(struct request_queue *q,
 675                                     struct request *rq);
 676extern void blk_delay_queue(struct request_queue *, unsigned long);
 677extern void blk_recount_segments(struct request_queue *, struct bio *);
 678extern int scsi_verify_blk_ioctl(struct block_device *, unsigned int);
 679extern int scsi_cmd_blk_ioctl(struct block_device *, fmode_t,
 680                              unsigned int, void __user *);
 681extern int scsi_cmd_ioctl(struct request_queue *, struct gendisk *, fmode_t,
 682                          unsigned int, void __user *);
 683extern int sg_scsi_ioctl(struct request_queue *, struct gendisk *, fmode_t,
 684                         struct scsi_ioctl_command __user *);
 685
 686extern void blk_queue_bio(struct request_queue *q, struct bio *bio);
 687
 688/*
 689 * A queue has just exitted congestion.  Note this in the global counter of
 690 * congested queues, and wake up anyone who was waiting for requests to be
 691 * put back.
 692 */
 693static inline void blk_clear_queue_congested(struct request_queue *q, int sync)
 694{
 695        clear_bdi_congested(&q->backing_dev_info, sync);
 696}
 697
 698/*
 699 * A queue has just entered congestion.  Flag that in the queue's VM-visible
 700 * state flags and increment the global gounter of congested queues.
 701 */
 702static inline void blk_set_queue_congested(struct request_queue *q, int sync)
 703{
 704        set_bdi_congested(&q->backing_dev_info, sync);
 705}
 706
 707extern void blk_start_queue(struct request_queue *q);
 708extern void blk_stop_queue(struct request_queue *q);
 709extern void blk_sync_queue(struct request_queue *q);
 710extern void __blk_stop_queue(struct request_queue *q);
 711extern void __blk_run_queue(struct request_queue *q);
 712extern void blk_run_queue(struct request_queue *);
 713extern void blk_run_queue_async(struct request_queue *q);
 714extern int blk_rq_map_user(struct request_queue *, struct request *,
 715                           struct rq_map_data *, void __user *, unsigned long,
 716                           gfp_t);
 717extern int blk_rq_unmap_user(struct bio *);
 718extern int blk_rq_map_kern(struct request_queue *, struct request *, void *, unsigned int, gfp_t);
 719extern int blk_rq_map_user_iov(struct request_queue *, struct request *,
 720                               struct rq_map_data *, struct sg_iovec *, int,
 721                               unsigned int, gfp_t);
 722extern int blk_execute_rq(struct request_queue *, struct gendisk *,
 723                          struct request *, int);
 724extern void blk_execute_rq_nowait(struct request_queue *, struct gendisk *,
 725                                  struct request *, int, rq_end_io_fn *);
 726
 727static inline struct request_queue *bdev_get_queue(struct block_device *bdev)
 728{
 729        return bdev->bd_disk->queue;
 730}
 731
 732/*
 733 * blk_rq_pos()                 : the current sector
 734 * blk_rq_bytes()               : bytes left in the entire request
 735 * blk_rq_cur_bytes()           : bytes left in the current segment
 736 * blk_rq_err_bytes()           : bytes left till the next error boundary
 737 * blk_rq_sectors()             : sectors left in the entire request
 738 * blk_rq_cur_sectors()         : sectors left in the current segment
 739 */
 740static inline sector_t blk_rq_pos(const struct request *rq)
 741{
 742        return rq->__sector;
 743}
 744
 745static inline unsigned int blk_rq_bytes(const struct request *rq)
 746{
 747        return rq->__data_len;
 748}
 749
 750static inline int blk_rq_cur_bytes(const struct request *rq)
 751{
 752        return rq->bio ? bio_cur_bytes(rq->bio) : 0;
 753}
 754
 755extern unsigned int blk_rq_err_bytes(const struct request *rq);
 756
 757static inline unsigned int blk_rq_sectors(const struct request *rq)
 758{
 759        return blk_rq_bytes(rq) >> 9;
 760}
 761
 762static inline unsigned int blk_rq_cur_sectors(const struct request *rq)
 763{
 764        return blk_rq_cur_bytes(rq) >> 9;
 765}
 766
 767/*
 768 * Request issue related functions.
 769 */
 770extern struct request *blk_peek_request(struct request_queue *q);
 771extern void blk_start_request(struct request *rq);
 772extern struct request *blk_fetch_request(struct request_queue *q);
 773
 774/*
 775 * Request completion related functions.
 776 *
 777 * blk_update_request() completes given number of bytes and updates
 778 * the request without completing it.
 779 *
 780 * blk_end_request() and friends.  __blk_end_request() must be called
 781 * with the request queue spinlock acquired.
 782 *
 783 * Several drivers define their own end_request and call
 784 * blk_end_request() for parts of the original function.
 785 * This prevents code duplication in drivers.
 786 */
 787extern bool blk_update_request(struct request *rq, int error,
 788                               unsigned int nr_bytes);
 789extern bool blk_end_request(struct request *rq, int error,
 790                            unsigned int nr_bytes);
 791extern void blk_end_request_all(struct request *rq, int error);
 792extern bool blk_end_request_cur(struct request *rq, int error);
 793extern bool blk_end_request_err(struct request *rq, int error);
 794extern bool __blk_end_request(struct request *rq, int error,
 795                              unsigned int nr_bytes);
 796extern void __blk_end_request_all(struct request *rq, int error);
 797extern bool __blk_end_request_cur(struct request *rq, int error);
 798extern bool __blk_end_request_err(struct request *rq, int error);
 799
 800extern void blk_complete_request(struct request *);
 801extern void __blk_complete_request(struct request *);
 802extern void blk_abort_request(struct request *);
 803extern void blk_abort_queue(struct request_queue *);
 804extern void blk_unprep_request(struct request *);
 805
 806/*
 807 * Access functions for manipulating queue properties
 808 */
 809extern struct request_queue *blk_init_queue_node(request_fn_proc *rfn,
 810                                        spinlock_t *lock, int node_id);
 811extern struct request_queue *blk_init_queue(request_fn_proc *, spinlock_t *);
 812extern struct request_queue *blk_init_allocated_queue(struct request_queue *,
 813                                                      request_fn_proc *, spinlock_t *);
 814extern void blk_cleanup_queue(struct request_queue *);
 815extern void blk_queue_make_request(struct request_queue *, make_request_fn *);
 816extern void blk_queue_bounce_limit(struct request_queue *, u64);
 817extern void blk_limits_max_hw_sectors(struct queue_limits *, unsigned int);
 818extern void blk_queue_max_hw_sectors(struct request_queue *, unsigned int);
 819extern void blk_queue_max_segments(struct request_queue *, unsigned short);
 820extern void blk_queue_max_segment_size(struct request_queue *, unsigned int);
 821extern void blk_queue_max_discard_sectors(struct request_queue *q,
 822                unsigned int max_discard_sectors);
 823extern void blk_queue_logical_block_size(struct request_queue *, unsigned short);
 824extern void blk_queue_physical_block_size(struct request_queue *, unsigned int);
 825extern void blk_queue_alignment_offset(struct request_queue *q,
 826                                       unsigned int alignment);
 827extern void blk_limits_io_min(struct queue_limits *limits, unsigned int min);
 828extern void blk_queue_io_min(struct request_queue *q, unsigned int min);
 829extern void blk_limits_io_opt(struct queue_limits *limits, unsigned int opt);
 830extern void blk_queue_io_opt(struct request_queue *q, unsigned int opt);
 831extern void blk_set_default_limits(struct queue_limits *lim);
 832extern int blk_stack_limits(struct queue_limits *t, struct queue_limits *b,
 833                            sector_t offset);
 834extern int bdev_stack_limits(struct queue_limits *t, struct block_device *bdev,
 835                            sector_t offset);
 836extern void disk_stack_limits(struct gendisk *disk, struct block_device *bdev,
 837                              sector_t offset);
 838extern void blk_queue_stack_limits(struct request_queue *t, struct request_queue *b);
 839extern void blk_queue_dma_pad(struct request_queue *, unsigned int);
 840extern void blk_queue_update_dma_pad(struct request_queue *, unsigned int);
 841extern int blk_queue_dma_drain(struct request_queue *q,
 842                               dma_drain_needed_fn *dma_drain_needed,
 843                               void *buf, unsigned int size);
 844extern void blk_queue_lld_busy(struct request_queue *q, lld_busy_fn *fn);
 845extern void blk_queue_segment_boundary(struct request_queue *, unsigned long);
 846extern void blk_queue_prep_rq(struct request_queue *, prep_rq_fn *pfn);
 847extern void blk_queue_unprep_rq(struct request_queue *, unprep_rq_fn *ufn);
 848extern void blk_queue_merge_bvec(struct request_queue *, merge_bvec_fn *);
 849extern void blk_queue_dma_alignment(struct request_queue *, int);
 850extern void blk_queue_update_dma_alignment(struct request_queue *, int);
 851extern void blk_queue_softirq_done(struct request_queue *, softirq_done_fn *);
 852extern void blk_queue_rq_timed_out(struct request_queue *, rq_timed_out_fn *);
 853extern void blk_queue_rq_timeout(struct request_queue *, unsigned int);
 854extern void blk_queue_flush(struct request_queue *q, unsigned int flush);
 855extern void blk_queue_flush_queueable(struct request_queue *q, bool queueable);
 856extern struct backing_dev_info *blk_get_backing_dev_info(struct block_device *bdev);
 857
 858extern int blk_rq_map_sg(struct request_queue *, struct request *, struct scatterlist *);
 859extern void blk_dump_rq_flags(struct request *, char *);
 860extern long nr_blockdev_pages(void);
 861
 862int blk_get_queue(struct request_queue *);
 863struct request_queue *blk_alloc_queue(gfp_t);
 864struct request_queue *blk_alloc_queue_node(gfp_t, int);
 865extern void blk_put_queue(struct request_queue *);
 866
 867/*
 868 * blk_plug permits building a queue of related requests by holding the I/O
 869 * fragments for a short period. This allows merging of sequential requests
 870 * into single larger request. As the requests are moved from a per-task list to
 871 * the device's request_queue in a batch, this results in improved scalability
 872 * as the lock contention for request_queue lock is reduced.
 873 *
 874 * It is ok not to disable preemption when adding the request to the plug list
 875 * or when attempting a merge, because blk_schedule_flush_list() will only flush
 876 * the plug list when the task sleeps by itself. For details, please see
 877 * schedule() where blk_schedule_flush_plug() is called.
 878 */
 879struct blk_plug {
 880        unsigned long magic; /* detect uninitialized use-cases */
 881        struct list_head list; /* requests */
 882        struct list_head cb_list; /* md requires an unplug callback */
 883        unsigned int should_sort; /* list to be sorted before flushing? */
 884};
 885#define BLK_MAX_REQUEST_COUNT 16
 886
 887struct blk_plug_cb {
 888        struct list_head list;
 889        void (*callback)(struct blk_plug_cb *);
 890};
 891
 892extern void blk_start_plug(struct blk_plug *);
 893extern void blk_finish_plug(struct blk_plug *);
 894extern void blk_flush_plug_list(struct blk_plug *, bool);
 895
 896static inline void blk_flush_plug(struct task_struct *tsk)
 897{
 898        struct blk_plug *plug = tsk->plug;
 899
 900        if (plug)
 901                blk_flush_plug_list(plug, false);
 902}
 903
 904static inline void blk_schedule_flush_plug(struct task_struct *tsk)
 905{
 906        struct blk_plug *plug = tsk->plug;
 907
 908        if (plug)
 909                blk_flush_plug_list(plug, true);
 910}
 911
 912static inline bool blk_needs_flush_plug(struct task_struct *tsk)
 913{
 914        struct blk_plug *plug = tsk->plug;
 915
 916        return plug && (!list_empty(&plug->list) || !list_empty(&plug->cb_list));
 917}
 918
 919/*
 920 * tag stuff
 921 */
 922#define blk_rq_tagged(rq)               ((rq)->cmd_flags & REQ_QUEUED)
 923extern int blk_queue_start_tag(struct request_queue *, struct request *);
 924extern struct request *blk_queue_find_tag(struct request_queue *, int);
 925extern void blk_queue_end_tag(struct request_queue *, struct request *);
 926extern int blk_queue_init_tags(struct request_queue *, int, struct blk_queue_tag *);
 927extern void blk_queue_free_tags(struct request_queue *);
 928extern int blk_queue_resize_tags(struct request_queue *, int);
 929extern void blk_queue_invalidate_tags(struct request_queue *);
 930extern struct blk_queue_tag *blk_init_tags(int);
 931extern void blk_free_tags(struct blk_queue_tag *);
 932
 933static inline struct request *blk_map_queue_find_tag(struct blk_queue_tag *bqt,
 934                                                int tag)
 935{
 936        if (unlikely(bqt == NULL || tag >= bqt->real_max_depth))
 937                return NULL;
 938        return bqt->tag_index[tag];
 939}
 940
 941#define BLKDEV_DISCARD_SECURE  0x01    /* secure discard */
 942
 943extern int blkdev_issue_flush(struct block_device *, gfp_t, sector_t *);
 944extern int blkdev_issue_discard(struct block_device *bdev, sector_t sector,
 945                sector_t nr_sects, gfp_t gfp_mask, unsigned long flags);
 946extern int blkdev_issue_zeroout(struct block_device *bdev, sector_t sector,
 947                        sector_t nr_sects, gfp_t gfp_mask);
 948static inline int sb_issue_discard(struct super_block *sb, sector_t block,
 949                sector_t nr_blocks, gfp_t gfp_mask, unsigned long flags)
 950{
 951        return blkdev_issue_discard(sb->s_bdev, block << (sb->s_blocksize_bits - 9),
 952                                    nr_blocks << (sb->s_blocksize_bits - 9),
 953                                    gfp_mask, flags);
 954}
 955static inline int sb_issue_zeroout(struct super_block *sb, sector_t block,
 956                sector_t nr_blocks, gfp_t gfp_mask)
 957{
 958        return blkdev_issue_zeroout(sb->s_bdev,
 959                                    block << (sb->s_blocksize_bits - 9),
 960                                    nr_blocks << (sb->s_blocksize_bits - 9),
 961                                    gfp_mask);
 962}
 963
 964extern int blk_verify_command(unsigned char *cmd, fmode_t has_write_perm);
 965
 966enum blk_default_limits {
 967        BLK_MAX_SEGMENTS        = 128,
 968        BLK_SAFE_MAX_SECTORS    = 255,
 969        BLK_DEF_MAX_SECTORS     = 1024,
 970        BLK_MAX_SEGMENT_SIZE    = 65536,
 971        BLK_SEG_BOUNDARY_MASK   = 0xFFFFFFFFUL,
 972};
 973
 974#define blkdev_entry_to_request(entry) list_entry((entry), struct request, queuelist)
 975
 976static inline unsigned long queue_bounce_pfn(struct request_queue *q)
 977{
 978        return q->limits.bounce_pfn;
 979}
 980
 981static inline unsigned long queue_segment_boundary(struct request_queue *q)
 982{
 983        return q->limits.seg_boundary_mask;
 984}
 985
 986static inline unsigned int queue_max_sectors(struct request_queue *q)
 987{
 988        return q->limits.max_sectors;
 989}
 990
 991static inline unsigned int queue_max_hw_sectors(struct request_queue *q)
 992{
 993        return q->limits.max_hw_sectors;
 994}
 995
 996static inline unsigned short queue_max_segments(struct request_queue *q)
 997{
 998        return q->limits.max_segments;
 999}
1000
1001static inline unsigned int queue_max_segment_size(struct request_queue *q)
1002{
1003        return q->limits.max_segment_size;
1004}
1005
1006static inline unsigned short queue_logical_block_size(struct request_queue *q)
1007{
1008        int retval = 512;
1009
1010        if (q && q->limits.logical_block_size)
1011                retval = q->limits.logical_block_size;
1012
1013        return retval;
1014}
1015
1016static inline unsigned short bdev_logical_block_size(struct block_device *bdev)
1017{
1018        return queue_logical_block_size(bdev_get_queue(bdev));
1019}
1020
1021static inline unsigned int queue_physical_block_size(struct request_queue *q)
1022{
1023        return q->limits.physical_block_size;
1024}
1025
1026static inline unsigned int bdev_physical_block_size(struct block_device *bdev)
1027{
1028        return queue_physical_block_size(bdev_get_queue(bdev));
1029}
1030
1031static inline unsigned int queue_io_min(struct request_queue *q)
1032{
1033        return q->limits.io_min;
1034}
1035
1036static inline int bdev_io_min(struct block_device *bdev)
1037{
1038        return queue_io_min(bdev_get_queue(bdev));
1039}
1040
1041static inline unsigned int queue_io_opt(struct request_queue *q)
1042{
1043        return q->limits.io_opt;
1044}
1045
1046static inline int bdev_io_opt(struct block_device *bdev)
1047{
1048        return queue_io_opt(bdev_get_queue(bdev));
1049}
1050
1051static inline int queue_alignment_offset(struct request_queue *q)
1052{
1053        if (q->limits.misaligned)
1054                return -1;
1055
1056        return q->limits.alignment_offset;
1057}
1058
1059static inline int queue_limit_alignment_offset(struct queue_limits *lim, sector_t sector)
1060{
1061        unsigned int granularity = max(lim->physical_block_size, lim->io_min);
1062        unsigned int alignment = (sector << 9) & (granularity - 1);
1063
1064        return (granularity + lim->alignment_offset - alignment)
1065                & (granularity - 1);
1066}
1067
1068static inline int bdev_alignment_offset(struct block_device *bdev)
1069{
1070        struct request_queue *q = bdev_get_queue(bdev);
1071
1072        if (q->limits.misaligned)
1073                return -1;
1074
1075        if (bdev != bdev->bd_contains)
1076                return bdev->bd_part->alignment_offset;
1077
1078        return q->limits.alignment_offset;
1079}
1080
1081static inline int queue_discard_alignment(struct request_queue *q)
1082{
1083        if (q->limits.discard_misaligned)
1084                return -1;
1085
1086        return q->limits.discard_alignment;
1087}
1088
1089static inline int queue_limit_discard_alignment(struct queue_limits *lim, sector_t sector)
1090{
1091        unsigned int alignment = (sector << 9) & (lim->discard_granularity - 1);
1092
1093        if (!lim->max_discard_sectors)
1094                return 0;
1095
1096        return (lim->discard_granularity + lim->discard_alignment - alignment)
1097                & (lim->discard_granularity - 1);
1098}
1099
1100static inline unsigned int queue_discard_zeroes_data(struct request_queue *q)
1101{
1102        if (q->limits.max_discard_sectors && q->limits.discard_zeroes_data == 1)
1103                return 1;
1104
1105        return 0;
1106}
1107
1108static inline unsigned int bdev_discard_zeroes_data(struct block_device *bdev)
1109{
1110        return queue_discard_zeroes_data(bdev_get_queue(bdev));
1111}
1112
1113static inline int queue_dma_alignment(struct request_queue *q)
1114{
1115        return q ? q->dma_alignment : 511;
1116}
1117
1118static inline int blk_rq_aligned(struct request_queue *q, unsigned long addr,
1119                                 unsigned int len)
1120{
1121        unsigned int alignment = queue_dma_alignment(q) | q->dma_pad_mask;
1122        return !(addr & alignment) && !(len & alignment);
1123}
1124
1125/* assumes size > 256 */
1126static inline unsigned int blksize_bits(unsigned int size)
1127{
1128        unsigned int bits = 8;
1129        do {
1130                bits++;
1131                size >>= 1;
1132        } while (size > 256);
1133        return bits;
1134}
1135
1136static inline unsigned int block_size(struct block_device *bdev)
1137{
1138        return bdev->bd_block_size;
1139}
1140
1141static inline bool queue_flush_queueable(struct request_queue *q)
1142{
1143        return !q->flush_not_queueable;
1144}
1145
1146typedef struct {struct page *v;} Sector;
1147
1148unsigned char *read_dev_sector(struct block_device *, sector_t, Sector *);
1149
1150static inline void put_dev_sector(Sector p)
1151{
1152        page_cache_release(p.v);
1153}
1154
1155struct work_struct;
1156int kblockd_schedule_work(struct request_queue *q, struct work_struct *work);
1157
1158#ifdef CONFIG_BLK_CGROUP
1159/*
1160 * This should not be using sched_clock(). A real patch is in progress
1161 * to fix this up, until that is in place we need to disable preemption
1162 * around sched_clock() in this function and set_io_start_time_ns().
1163 */
1164static inline void set_start_time_ns(struct request *req)
1165{
1166        preempt_disable();
1167        req->start_time_ns = sched_clock();
1168        preempt_enable();
1169}
1170
1171static inline void set_io_start_time_ns(struct request *req)
1172{
1173        preempt_disable();
1174        req->io_start_time_ns = sched_clock();
1175        preempt_enable();
1176}
1177
1178static inline uint64_t rq_start_time_ns(struct request *req)
1179{
1180        return req->start_time_ns;
1181}
1182
1183static inline uint64_t rq_io_start_time_ns(struct request *req)
1184{
1185        return req->io_start_time_ns;
1186}
1187#else
1188static inline void set_start_time_ns(struct request *req) {}
1189static inline void set_io_start_time_ns(struct request *req) {}
1190static inline uint64_t rq_start_time_ns(struct request *req)
1191{
1192        return 0;
1193}
1194static inline uint64_t rq_io_start_time_ns(struct request *req)
1195{
1196        return 0;
1197}
1198#endif
1199
1200#define MODULE_ALIAS_BLOCKDEV(major,minor) \
1201        MODULE_ALIAS("block-major-" __stringify(major) "-" __stringify(minor))
1202#define MODULE_ALIAS_BLOCKDEV_MAJOR(major) \
1203        MODULE_ALIAS("block-major-" __stringify(major) "-*")
1204
1205#if defined(CONFIG_BLK_DEV_INTEGRITY)
1206
1207#define INTEGRITY_FLAG_READ     2       /* verify data integrity on read */
1208#define INTEGRITY_FLAG_WRITE    4       /* generate data integrity on write */
1209
1210struct blk_integrity_exchg {
1211        void                    *prot_buf;
1212        void                    *data_buf;
1213        sector_t                sector;
1214        unsigned int            data_size;
1215        unsigned short          sector_size;
1216        const char              *disk_name;
1217};
1218
1219typedef void (integrity_gen_fn) (struct blk_integrity_exchg *);
1220typedef int (integrity_vrfy_fn) (struct blk_integrity_exchg *);
1221typedef void (integrity_set_tag_fn) (void *, void *, unsigned int);
1222typedef void (integrity_get_tag_fn) (void *, void *, unsigned int);
1223
1224struct blk_integrity {
1225        integrity_gen_fn        *generate_fn;
1226        integrity_vrfy_fn       *verify_fn;
1227        integrity_set_tag_fn    *set_tag_fn;
1228        integrity_get_tag_fn    *get_tag_fn;
1229
1230        unsigned short          flags;
1231        unsigned short          tuple_size;
1232        unsigned short          sector_size;
1233        unsigned short          tag_size;
1234
1235        const char              *name;
1236
1237        struct kobject          kobj;
1238};
1239
1240extern bool blk_integrity_is_initialized(struct gendisk *);
1241extern int blk_integrity_register(struct gendisk *, struct blk_integrity *);
1242extern void blk_integrity_unregister(struct gendisk *);
1243extern int blk_integrity_compare(struct gendisk *, struct gendisk *);
1244extern int blk_rq_map_integrity_sg(struct request_queue *, struct bio *,
1245                                   struct scatterlist *);
1246extern int blk_rq_count_integrity_sg(struct request_queue *, struct bio *);
1247extern int blk_integrity_merge_rq(struct request_queue *, struct request *,
1248                                  struct request *);
1249extern int blk_integrity_merge_bio(struct request_queue *, struct request *,
1250                                   struct bio *);
1251
1252static inline
1253struct blk_integrity *bdev_get_integrity(struct block_device *bdev)
1254{
1255        return bdev->bd_disk->integrity;
1256}
1257
1258static inline struct blk_integrity *blk_get_integrity(struct gendisk *disk)
1259{
1260        return disk->integrity;
1261}
1262
1263static inline int blk_integrity_rq(struct request *rq)
1264{
1265        if (rq->bio == NULL)
1266                return 0;
1267
1268        return bio_integrity(rq->bio);
1269}
1270
1271static inline void blk_queue_max_integrity_segments(struct request_queue *q,
1272                                                    unsigned int segs)
1273{
1274        q->limits.max_integrity_segments = segs;
1275}
1276
1277static inline unsigned short
1278queue_max_integrity_segments(struct request_queue *q)
1279{
1280        return q->limits.max_integrity_segments;
1281}
1282
1283#else /* CONFIG_BLK_DEV_INTEGRITY */
1284
1285#define blk_integrity_rq(rq)                    (0)
1286#define blk_rq_count_integrity_sg(a, b)         (0)
1287#define blk_rq_map_integrity_sg(a, b, c)        (0)
1288#define bdev_get_integrity(a)                   (0)
1289#define blk_get_integrity(a)                    (0)
1290#define blk_integrity_compare(a, b)             (0)
1291#define blk_integrity_register(a, b)            (0)
1292#define blk_integrity_unregister(a)             do { } while (0)
1293#define blk_queue_max_integrity_segments(a, b)  do { } while (0)
1294#define queue_max_integrity_segments(a)         (0)
1295#define blk_integrity_merge_rq(a, b, c)         (0)
1296#define blk_integrity_merge_bio(a, b, c)        (0)
1297#define blk_integrity_is_initialized(a)         (0)
1298
1299#endif /* CONFIG_BLK_DEV_INTEGRITY */
1300
1301struct block_device_operations {
1302        int (*open) (struct block_device *, fmode_t);
1303        int (*release) (struct gendisk *, fmode_t);
1304        int (*ioctl) (struct block_device *, fmode_t, unsigned, unsigned long);
1305        int (*compat_ioctl) (struct block_device *, fmode_t, unsigned, unsigned long);
1306        int (*direct_access) (struct block_device *, sector_t,
1307                                                void **, unsigned long *);
1308        unsigned int (*check_events) (struct gendisk *disk,
1309                                      unsigned int clearing);
1310        /* ->media_changed() is DEPRECATED, use ->check_events() instead */
1311        int (*media_changed) (struct gendisk *);
1312        void (*unlock_native_capacity) (struct gendisk *);
1313        int (*revalidate_disk) (struct gendisk *);
1314        int (*getgeo)(struct block_device *, struct hd_geometry *);
1315        /* this callback is with swap_lock and sometimes page table lock held */
1316        void (*swap_slot_free_notify) (struct block_device *, unsigned long);
1317        struct module *owner;
1318};
1319
1320extern int __blkdev_driver_ioctl(struct block_device *, fmode_t, unsigned int,
1321                                 unsigned long);
1322#else /* CONFIG_BLOCK */
1323/*
1324 * stubs for when the block layer is configured out
1325 */
1326#define buffer_heads_over_limit 0
1327
1328static inline long nr_blockdev_pages(void)
1329{
1330        return 0;
1331}
1332
1333struct blk_plug {
1334};
1335
1336static inline void blk_start_plug(struct blk_plug *plug)
1337{
1338}
1339
1340static inline void blk_finish_plug(struct blk_plug *plug)
1341{
1342}
1343
1344static inline void blk_flush_plug(struct task_struct *task)
1345{
1346}
1347
1348static inline void blk_schedule_flush_plug(struct task_struct *task)
1349{
1350}
1351
1352
1353static inline bool blk_needs_flush_plug(struct task_struct *tsk)
1354{
1355        return false;
1356}
1357
1358#endif /* CONFIG_BLOCK */
1359
1360#endif
1361
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.