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/module.h>
18#include <linux/stringify.h>
19#include <linux/bsg.h>
20
21#include <asm/scatterlist.h>
22
23struct scsi_ioctl_command;
24
25struct request_queue;
26typedef struct request_queue request_queue_t __deprecated;
27struct elevator_queue;
28typedef struct elevator_queue elevator_t;
29struct request_pm_state;
30struct blk_trace;
31struct request;
32struct sg_io_hdr;
33
34#define BLKDEV_MIN_RQ 4
35#define BLKDEV_MAX_RQ 128
36
37int put_io_context(struct io_context *ioc);
38void exit_io_context(void);
39struct io_context *get_io_context(gfp_t gfp_flags, int node);
40struct io_context *alloc_io_context(gfp_t gfp_flags, int node);
41void copy_io_context(struct io_context **pdst, struct io_context **psrc);
42
43struct request;
44typedef void (rq_end_io_fn)(struct request *, int);
45
46struct request_list {
47 int count[2];
48 int starved[2];
49 int elvpriv;
50 mempool_t *rq_pool;
51 wait_queue_head_t wait[2];
52};
53
54
55
56
57enum rq_cmd_type_bits {
58 REQ_TYPE_FS = 1,
59 REQ_TYPE_BLOCK_PC,
60 REQ_TYPE_SENSE,
61 REQ_TYPE_PM_SUSPEND,
62 REQ_TYPE_PM_RESUME,
63 REQ_TYPE_PM_SHUTDOWN,
64 REQ_TYPE_FLUSH,
65 REQ_TYPE_SPECIAL,
66 REQ_TYPE_LINUX_BLOCK,
67
68
69
70
71
72 REQ_TYPE_ATA_TASKFILE,
73 REQ_TYPE_ATA_PC,
74};
75
76
77
78
79
80
81
82
83
84
85enum {
86
87
88
89 REQ_LB_OP_EJECT = 0x40,
90 REQ_LB_OP_FLUSH = 0x41,
91};
92
93
94
95
96enum rq_flag_bits {
97 __REQ_RW,
98 __REQ_FAILFAST,
99 __REQ_SORTED,
100 __REQ_SOFTBARRIER,
101 __REQ_HARDBARRIER,
102 __REQ_FUA,
103 __REQ_NOMERGE,
104 __REQ_STARTED,
105 __REQ_DONTPREP,
106 __REQ_QUEUED,
107 __REQ_ELVPRIV,
108 __REQ_FAILED,
109 __REQ_QUIET,
110 __REQ_PREEMPT,
111 __REQ_ORDERED_COLOR,
112 __REQ_RW_SYNC,
113 __REQ_ALLOCED,
114 __REQ_RW_META,
115 __REQ_COPY_USER,
116 __REQ_NR_BITS,
117};
118
119#define REQ_RW (1 << __REQ_RW)
120#define REQ_FAILFAST (1 << __REQ_FAILFAST)
121#define REQ_SORTED (1 << __REQ_SORTED)
122#define REQ_SOFTBARRIER (1 << __REQ_SOFTBARRIER)
123#define REQ_HARDBARRIER (1 << __REQ_HARDBARRIER)
124#define REQ_FUA (1 << __REQ_FUA)
125#define REQ_NOMERGE (1 << __REQ_NOMERGE)
126#define REQ_STARTED (1 << __REQ_STARTED)
127#define REQ_DONTPREP (1 << __REQ_DONTPREP)
128#define REQ_QUEUED (1 << __REQ_QUEUED)
129#define REQ_ELVPRIV (1 << __REQ_ELVPRIV)
130#define REQ_FAILED (1 << __REQ_FAILED)
131#define REQ_QUIET (1 << __REQ_QUIET)
132#define REQ_PREEMPT (1 << __REQ_PREEMPT)
133#define REQ_ORDERED_COLOR (1 << __REQ_ORDERED_COLOR)
134#define REQ_RW_SYNC (1 << __REQ_RW_SYNC)
135#define REQ_ALLOCED (1 << __REQ_ALLOCED)
136#define REQ_RW_META (1 << __REQ_RW_META)
137#define REQ_COPY_USER (1 << __REQ_COPY_USER)
138
139#define BLK_MAX_CDB 16
140
141
142
143
144
145
146struct request {
147 struct list_head queuelist;
148 struct list_head donelist;
149
150 struct request_queue *q;
151
152 unsigned int cmd_flags;
153 enum rq_cmd_type_bits cmd_type;
154
155
156
157
158
159 sector_t sector;
160 sector_t hard_sector;
161 unsigned long nr_sectors;
162 unsigned long hard_nr_sectors;
163
164 unsigned int current_nr_sectors;
165
166
167 unsigned int hard_cur_sectors;
168
169 struct bio *bio;
170 struct bio *biotail;
171
172 struct hlist_node hash;
173
174
175
176
177
178 union {
179 struct rb_node rb_node;
180 void *completion_data;
181 };
182
183
184
185
186
187 void *elevator_private;
188 void *elevator_private2;
189
190 struct gendisk *rq_disk;
191 unsigned long start_time;
192
193
194
195
196 unsigned short nr_phys_segments;
197
198
199
200
201
202
203 unsigned short nr_hw_segments;
204
205 unsigned short ioprio;
206
207 void *special;
208 char *buffer;
209
210 int tag;
211 int errors;
212
213 int ref_count;
214
215
216
217
218 unsigned short cmd_len;
219 unsigned char __cmd[BLK_MAX_CDB];
220 unsigned char *cmd;
221
222 unsigned int data_len;
223 unsigned int extra_len;
224 unsigned int sense_len;
225 void *data;
226 void *sense;
227
228 unsigned int timeout;
229 int retries;
230
231
232
233
234 rq_end_io_fn *end_io;
235 void *end_io_data;
236
237
238 struct request *next_rq;
239};
240
241
242
243
244
245struct request_pm_state
246{
247
248 int pm_step;
249
250 u32 pm_state;
251 void* data;
252};
253
254#include <linux/elevator.h>
255
256typedef void (request_fn_proc) (struct request_queue *q);
257typedef int (make_request_fn) (struct request_queue *q, struct bio *bio);
258typedef int (prep_rq_fn) (struct request_queue *, struct request *);
259typedef void (unplug_fn) (struct request_queue *);
260
261struct bio_vec;
262typedef int (merge_bvec_fn) (struct request_queue *, struct bio *, struct bio_vec *);
263typedef void (prepare_flush_fn) (struct request_queue *, struct request *);
264typedef void (softirq_done_fn)(struct request *);
265typedef int (dma_drain_needed_fn)(struct request *);
266
267enum blk_queue_state {
268 Queue_down,
269 Queue_up,
270};
271
272struct blk_queue_tag {
273 struct request **tag_index;
274 unsigned long *tag_map;
275 int busy;
276 int max_depth;
277 int real_max_depth;
278 atomic_t refcnt;
279};
280
281struct request_queue
282{
283
284
285
286 struct list_head queue_head;
287 struct request *last_merge;
288 elevator_t *elevator;
289
290
291
292
293 struct request_list rq;
294
295 request_fn_proc *request_fn;
296 make_request_fn *make_request_fn;
297 prep_rq_fn *prep_rq_fn;
298 unplug_fn *unplug_fn;
299 merge_bvec_fn *merge_bvec_fn;
300 prepare_flush_fn *prepare_flush_fn;
301 softirq_done_fn *softirq_done_fn;
302 dma_drain_needed_fn *dma_drain_needed;
303
304
305
306
307 sector_t end_sector;
308 struct request *boundary_rq;
309
310
311
312
313 struct timer_list unplug_timer;
314 int unplug_thresh;
315 unsigned long unplug_delay;
316 struct work_struct unplug_work;
317
318 struct backing_dev_info backing_dev_info;
319
320
321
322
323
324 void *queuedata;
325
326
327
328
329 unsigned long bounce_pfn;
330 gfp_t bounce_gfp;
331
332
333
334
335 unsigned long queue_flags;
336
337
338
339
340
341
342 spinlock_t __queue_lock;
343 spinlock_t *queue_lock;
344
345
346
347
348 struct kobject kobj;
349
350
351
352
353 unsigned long nr_requests;
354 unsigned int nr_congestion_on;
355 unsigned int nr_congestion_off;
356 unsigned int nr_batching;
357
358 unsigned int max_sectors;
359 unsigned int max_hw_sectors;
360 unsigned short max_phys_segments;
361 unsigned short max_hw_segments;
362 unsigned short hardsect_size;
363 unsigned int max_segment_size;
364
365 unsigned long seg_boundary_mask;
366 void *dma_drain_buffer;
367 unsigned int dma_drain_size;
368 unsigned int dma_pad_mask;
369 unsigned int dma_alignment;
370
371 struct blk_queue_tag *queue_tags;
372 struct list_head tag_busy_list;
373
374 unsigned int nr_sorted;
375 unsigned int in_flight;
376
377
378
379
380 unsigned int sg_timeout;
381 unsigned int sg_reserved_size;
382 int node;
383#ifdef CONFIG_BLK_DEV_IO_TRACE
384 struct blk_trace *blk_trace;
385#endif
386
387
388
389 unsigned int ordered, next_ordered, ordseq;
390 int orderr, ordcolor;
391 struct request pre_flush_rq, bar_rq, post_flush_rq;
392 struct request *orig_bar_rq;
393
394 struct mutex sysfs_lock;
395
396#if defined(CONFIG_BLK_DEV_BSG)
397 struct bsg_class_device bsg_dev;
398#endif
399};
400
401#define QUEUE_FLAG_CLUSTER 0
402#define QUEUE_FLAG_QUEUED 1
403#define QUEUE_FLAG_STOPPED 2
404#define QUEUE_FLAG_READFULL 3
405#define QUEUE_FLAG_WRITEFULL 4
406#define QUEUE_FLAG_DEAD 5
407#define QUEUE_FLAG_REENTER 6
408#define QUEUE_FLAG_PLUGGED 7
409#define QUEUE_FLAG_ELVSWITCH 8
410#define QUEUE_FLAG_BIDI 9
411#define QUEUE_FLAG_NOMERGES 10
412
413static inline int queue_is_locked(struct request_queue *q)
414{
415#ifdef CONFIG_SMP
416 spinlock_t *lock = q->queue_lock;
417 return lock && spin_is_locked(lock);
418#else
419 return 1;
420#endif
421}
422
423static inline void queue_flag_set_unlocked(unsigned int flag,
424 struct request_queue *q)
425{
426 __set_bit(flag, &q->queue_flags);
427}
428
429static inline void queue_flag_set(unsigned int flag, struct request_queue *q)
430{
431 WARN_ON_ONCE(!queue_is_locked(q));
432 __set_bit(flag, &q->queue_flags);
433}
434
435static inline void queue_flag_clear_unlocked(unsigned int flag,
436 struct request_queue *q)
437{
438 __clear_bit(flag, &q->queue_flags);
439}
440
441static inline void queue_flag_clear(unsigned int flag, struct request_queue *q)
442{
443 WARN_ON_ONCE(!queue_is_locked(q));
444 __clear_bit(flag, &q->queue_flags);
445}
446
447enum {
448
449
450
451
452
453
454
455
456
457
458
459 QUEUE_ORDERED_NONE = 0x00,
460 QUEUE_ORDERED_DRAIN = 0x01,
461 QUEUE_ORDERED_TAG = 0x02,
462
463 QUEUE_ORDERED_PREFLUSH = 0x10,
464 QUEUE_ORDERED_POSTFLUSH = 0x20,
465 QUEUE_ORDERED_FUA = 0x40,
466
467 QUEUE_ORDERED_DRAIN_FLUSH = QUEUE_ORDERED_DRAIN |
468 QUEUE_ORDERED_PREFLUSH | QUEUE_ORDERED_POSTFLUSH,
469 QUEUE_ORDERED_DRAIN_FUA = QUEUE_ORDERED_DRAIN |
470 QUEUE_ORDERED_PREFLUSH | QUEUE_ORDERED_FUA,
471 QUEUE_ORDERED_TAG_FLUSH = QUEUE_ORDERED_TAG |
472 QUEUE_ORDERED_PREFLUSH | QUEUE_ORDERED_POSTFLUSH,
473 QUEUE_ORDERED_TAG_FUA = QUEUE_ORDERED_TAG |
474 QUEUE_ORDERED_PREFLUSH | QUEUE_ORDERED_FUA,
475
476
477
478
479 QUEUE_ORDSEQ_STARTED = 0x01,
480 QUEUE_ORDSEQ_DRAIN = 0x02,
481 QUEUE_ORDSEQ_PREFLUSH = 0x04,
482 QUEUE_ORDSEQ_BAR = 0x08,
483 QUEUE_ORDSEQ_POSTFLUSH = 0x10,
484 QUEUE_ORDSEQ_DONE = 0x20,
485};
486
487#define blk_queue_plugged(q) test_bit(QUEUE_FLAG_PLUGGED, &(q)->queue_flags)
488#define blk_queue_tagged(q) test_bit(QUEUE_FLAG_QUEUED, &(q)->queue_flags)
489#define blk_queue_stopped(q) test_bit(QUEUE_FLAG_STOPPED, &(q)->queue_flags)
490#define blk_queue_nomerges(q) test_bit(QUEUE_FLAG_NOMERGES, &(q)->queue_flags)
491#define blk_queue_flushing(q) ((q)->ordseq)
492
493#define blk_fs_request(rq) ((rq)->cmd_type == REQ_TYPE_FS)
494#define blk_pc_request(rq) ((rq)->cmd_type == REQ_TYPE_BLOCK_PC)
495#define blk_special_request(rq) ((rq)->cmd_type == REQ_TYPE_SPECIAL)
496#define blk_sense_request(rq) ((rq)->cmd_type == REQ_TYPE_SENSE)
497
498#define blk_noretry_request(rq) ((rq)->cmd_flags & REQ_FAILFAST)
499#define blk_rq_started(rq) ((rq)->cmd_flags & REQ_STARTED)
500
501#define blk_account_rq(rq) (blk_rq_started(rq) && blk_fs_request(rq))
502
503#define blk_pm_suspend_request(rq) ((rq)->cmd_type == REQ_TYPE_PM_SUSPEND)
504#define blk_pm_resume_request(rq) ((rq)->cmd_type == REQ_TYPE_PM_RESUME)
505#define blk_pm_request(rq) \
506 (blk_pm_suspend_request(rq) || blk_pm_resume_request(rq))
507
508#define blk_sorted_rq(rq) ((rq)->cmd_flags & REQ_SORTED)
509#define blk_barrier_rq(rq) ((rq)->cmd_flags & REQ_HARDBARRIER)
510#define blk_fua_rq(rq) ((rq)->cmd_flags & REQ_FUA)
511#define blk_bidi_rq(rq) ((rq)->next_rq != NULL)
512#define blk_empty_barrier(rq) (blk_barrier_rq(rq) && blk_fs_request(rq) && !(rq)->hard_nr_sectors)
513
514#define blk_queued_rq(rq) (!list_empty(&(rq)->queuelist))
515
516#define list_entry_rq(ptr) list_entry((ptr), struct request, queuelist)
517
518#define rq_data_dir(rq) ((rq)->cmd_flags & 1)
519
520
521
522
523#define rq_is_sync(rq) (rq_data_dir((rq)) == READ || (rq)->cmd_flags & REQ_RW_SYNC)
524#define rq_is_meta(rq) ((rq)->cmd_flags & REQ_RW_META)
525
526static inline int blk_queue_full(struct request_queue *q, int rw)
527{
528 if (rw == READ)
529 return test_bit(QUEUE_FLAG_READFULL, &q->queue_flags);
530 return test_bit(QUEUE_FLAG_WRITEFULL, &q->queue_flags);
531}
532
533static inline void blk_set_queue_full(struct request_queue *q, int rw)
534{
535 if (rw == READ)
536 queue_flag_set(QUEUE_FLAG_READFULL, q);
537 else
538 queue_flag_set(QUEUE_FLAG_WRITEFULL, q);
539}
540
541static inline void blk_clear_queue_full(struct request_queue *q, int rw)
542{
543 if (rw == READ)
544 queue_flag_clear(QUEUE_FLAG_READFULL, q);
545 else
546 queue_flag_clear(QUEUE_FLAG_WRITEFULL, q);
547}
548
549
550
551
552
553
554#define RQ_NOMERGE_FLAGS \
555 (REQ_NOMERGE | REQ_STARTED | REQ_HARDBARRIER | REQ_SOFTBARRIER)
556#define rq_mergeable(rq) \
557 (!((rq)->cmd_flags & RQ_NOMERGE_FLAGS) && blk_fs_request((rq)))
558
559
560
561
562#define BLKPREP_OK 0
563#define BLKPREP_KILL 1
564#define BLKPREP_DEFER 2
565
566extern unsigned long blk_max_low_pfn, blk_max_pfn;
567
568
569
570
571
572
573
574
575
576#if BITS_PER_LONG == 32
577#define BLK_BOUNCE_HIGH ((u64)blk_max_low_pfn << PAGE_SHIFT)
578#else
579#define BLK_BOUNCE_HIGH -1ULL
580#endif
581#define BLK_BOUNCE_ANY (-1ULL)
582#define BLK_BOUNCE_ISA (ISA_DMA_THRESHOLD)
583
584
585
586
587#define BLK_DEFAULT_SG_TIMEOUT (60 * HZ)
588
589#ifdef CONFIG_BOUNCE
590extern int init_emergency_isa_pool(void);
591extern void blk_queue_bounce(struct request_queue *q, struct bio **bio);
592#else
593static inline int init_emergency_isa_pool(void)
594{
595 return 0;
596}
597static inline void blk_queue_bounce(struct request_queue *q, struct bio **bio)
598{
599}
600#endif
601
602struct req_iterator {
603 int i;
604 struct bio *bio;
605};
606
607
608#define __rq_for_each_bio(_bio, rq) \
609 if ((rq->bio)) \
610 for (_bio = (rq)->bio; _bio; _bio = _bio->bi_next)
611
612#define rq_for_each_segment(bvl, _rq, _iter) \
613 __rq_for_each_bio(_iter.bio, _rq) \
614 bio_for_each_segment(bvl, _iter.bio, _iter.i)
615
616#define rq_iter_last(rq, _iter) \
617 (_iter.bio->bi_next == NULL && _iter.i == _iter.bio->bi_vcnt-1)
618
619extern int blk_register_queue(struct gendisk *disk);
620extern void blk_unregister_queue(struct gendisk *disk);
621extern void register_disk(struct gendisk *dev);
622extern void generic_make_request(struct bio *bio);
623extern void blk_rq_init(struct request_queue *q, struct request *rq);
624extern void blk_put_request(struct request *);
625extern void __blk_put_request(struct request_queue *, struct request *);
626extern void blk_end_sync_rq(struct request *rq, int error);
627extern struct request *blk_get_request(struct request_queue *, int, gfp_t);
628extern void blk_insert_request(struct request_queue *, struct request *, int, void *);
629extern void blk_requeue_request(struct request_queue *, struct request *);
630extern void blk_plug_device(struct request_queue *);
631extern int blk_remove_plug(struct request_queue *);
632extern void blk_recount_segments(struct request_queue *, struct bio *);
633extern int scsi_cmd_ioctl(struct file *, struct request_queue *,
634 struct gendisk *, unsigned int, void __user *);
635extern int sg_scsi_ioctl(struct file *, struct request_queue *,
636 struct gendisk *, struct scsi_ioctl_command __user *);
637
638
639
640
641extern int blk_rq_append_bio(struct request_queue *q, struct request *rq,
642 struct bio *bio);
643
644
645
646
647
648
649static inline void blk_clear_queue_congested(struct request_queue *q, int rw)
650{
651 clear_bdi_congested(&q->backing_dev_info, rw);
652}
653
654
655
656
657
658static inline void blk_set_queue_congested(struct request_queue *q, int rw)
659{
660 set_bdi_congested(&q->backing_dev_info, rw);
661}
662
663extern void blk_start_queue(struct request_queue *q);
664extern void blk_stop_queue(struct request_queue *q);
665extern void blk_sync_queue(struct request_queue *q);
666extern void __blk_stop_queue(struct request_queue *q);
667extern void __blk_run_queue(struct request_queue *);
668extern void blk_run_queue(struct request_queue *);
669extern void blk_start_queueing(struct request_queue *);
670extern int blk_rq_map_user(struct request_queue *, struct request *, void __user *, unsigned long);
671extern int blk_rq_unmap_user(struct bio *);
672extern int blk_rq_map_kern(struct request_queue *, struct request *, void *, unsigned int, gfp_t);
673extern int blk_rq_map_user_iov(struct request_queue *, struct request *,
674 struct sg_iovec *, int, unsigned int);
675extern int blk_execute_rq(struct request_queue *, struct gendisk *,
676 struct request *, int);
677extern void blk_execute_rq_nowait(struct request_queue *, struct gendisk *,
678 struct request *, int, rq_end_io_fn *);
679extern int blk_verify_command(unsigned char *, int);
680extern void blk_unplug(struct request_queue *q);
681
682static inline struct request_queue *bdev_get_queue(struct block_device *bdev)
683{
684 return bdev->bd_disk->queue;
685}
686
687static inline void blk_run_backing_dev(struct backing_dev_info *bdi,
688 struct page *page)
689{
690 if (bdi && bdi->unplug_io_fn)
691 bdi->unplug_io_fn(bdi, page);
692}
693
694static inline void blk_run_address_space(struct address_space *mapping)
695{
696 if (mapping)
697 blk_run_backing_dev(mapping->backing_dev_info, NULL);
698}
699
700
701
702
703
704
705
706
707
708
709extern int blk_end_request(struct request *rq, int error,
710 unsigned int nr_bytes);
711extern int __blk_end_request(struct request *rq, int error,
712 unsigned int nr_bytes);
713extern int blk_end_bidi_request(struct request *rq, int error,
714 unsigned int nr_bytes, unsigned int bidi_bytes);
715extern void end_request(struct request *, int);
716extern void end_queued_request(struct request *, int);
717extern void end_dequeued_request(struct request *, int);
718extern int blk_end_request_callback(struct request *rq, int error,
719 unsigned int nr_bytes,
720 int (drv_callback)(struct request *));
721extern void blk_complete_request(struct request *);
722
723
724
725
726
727
728extern unsigned int blk_rq_bytes(struct request *rq);
729extern unsigned int blk_rq_cur_bytes(struct request *rq);
730
731static inline void blkdev_dequeue_request(struct request *req)
732{
733 elv_dequeue_request(req->q, req);
734}
735
736
737
738
739extern struct request_queue *blk_init_queue_node(request_fn_proc *rfn,
740 spinlock_t *lock, int node_id);
741extern struct request_queue *blk_init_queue(request_fn_proc *, spinlock_t *);
742extern void blk_cleanup_queue(struct request_queue *);
743extern void blk_queue_make_request(struct request_queue *, make_request_fn *);
744extern void blk_queue_bounce_limit(struct request_queue *, u64);
745extern void blk_queue_max_sectors(struct request_queue *, unsigned int);
746extern void blk_queue_max_phys_segments(struct request_queue *, unsigned short);
747extern void blk_queue_max_hw_segments(struct request_queue *, unsigned short);
748extern void blk_queue_max_segment_size(struct request_queue *, unsigned int);
749extern void blk_queue_hardsect_size(struct request_queue *, unsigned short);
750extern void blk_queue_stack_limits(struct request_queue *t, struct request_queue *b);
751extern void blk_queue_dma_pad(struct request_queue *, unsigned int);
752extern int blk_queue_dma_drain(struct request_queue *q,
753 dma_drain_needed_fn *dma_drain_needed,
754 void *buf, unsigned int size);
755extern void blk_queue_segment_boundary(struct request_queue *, unsigned long);
756extern void blk_queue_prep_rq(struct request_queue *, prep_rq_fn *pfn);
757extern void blk_queue_merge_bvec(struct request_queue *, merge_bvec_fn *);
758extern void blk_queue_dma_alignment(struct request_queue *, int);
759extern void blk_queue_update_dma_alignment(struct request_queue *, int);
760extern void blk_queue_softirq_done(struct request_queue *, softirq_done_fn *);
761extern struct backing_dev_info *blk_get_backing_dev_info(struct block_device *bdev);
762extern int blk_queue_ordered(struct request_queue *, unsigned, prepare_flush_fn *);
763extern int blk_do_ordered(struct request_queue *, struct request **);
764extern unsigned blk_ordered_cur_seq(struct request_queue *);
765extern unsigned blk_ordered_req_seq(struct request *);
766extern void blk_ordered_complete_seq(struct request_queue *, unsigned, int);
767
768extern int blk_rq_map_sg(struct request_queue *, struct request *, struct scatterlist *);
769extern void blk_dump_rq_flags(struct request *, char *);
770extern void generic_unplug_device(struct request_queue *);
771extern void __generic_unplug_device(struct request_queue *);
772extern long nr_blockdev_pages(void);
773
774int blk_get_queue(struct request_queue *);
775struct request_queue *blk_alloc_queue(gfp_t);
776struct request_queue *blk_alloc_queue_node(gfp_t, int);
777extern void blk_put_queue(struct request_queue *);
778
779
780
781
782#define blk_queue_tag_depth(q) ((q)->queue_tags->busy)
783#define blk_queue_tag_queue(q) ((q)->queue_tags->busy < (q)->queue_tags->max_depth)
784#define blk_rq_tagged(rq) ((rq)->cmd_flags & REQ_QUEUED)
785extern int blk_queue_start_tag(struct request_queue *, struct request *);
786extern struct request *blk_queue_find_tag(struct request_queue *, int);
787extern void blk_queue_end_tag(struct request_queue *, struct request *);
788extern int blk_queue_init_tags(struct request_queue *, int, struct blk_queue_tag *);
789extern void blk_queue_free_tags(struct request_queue *);
790extern int blk_queue_resize_tags(struct request_queue *, int);
791extern void blk_queue_invalidate_tags(struct request_queue *);
792extern struct blk_queue_tag *blk_init_tags(int);
793extern void blk_free_tags(struct blk_queue_tag *);
794
795static inline struct request *blk_map_queue_find_tag(struct blk_queue_tag *bqt,
796 int tag)
797{
798 if (unlikely(bqt == NULL || tag >= bqt->real_max_depth))
799 return NULL;
800 return bqt->tag_index[tag];
801}
802
803extern int blkdev_issue_flush(struct block_device *, sector_t *);
804
805#define MAX_PHYS_SEGMENTS 128
806#define MAX_HW_SEGMENTS 128
807#define SAFE_MAX_SECTORS 255
808#define BLK_DEF_MAX_SECTORS 1024
809
810#define MAX_SEGMENT_SIZE 65536
811
812#define blkdev_entry_to_request(entry) list_entry((entry), struct request, queuelist)
813
814static inline int queue_hardsect_size(struct request_queue *q)
815{
816 int retval = 512;
817
818 if (q && q->hardsect_size)
819 retval = q->hardsect_size;
820
821 return retval;
822}
823
824static inline int bdev_hardsect_size(struct block_device *bdev)
825{
826 return queue_hardsect_size(bdev_get_queue(bdev));
827}
828
829static inline int queue_dma_alignment(struct request_queue *q)
830{
831 return q ? q->dma_alignment : 511;
832}
833
834
835static inline unsigned int blksize_bits(unsigned int size)
836{
837 unsigned int bits = 8;
838 do {
839 bits++;
840 size >>= 1;
841 } while (size > 256);
842 return bits;
843}
844
845static inline unsigned int block_size(struct block_device *bdev)
846{
847 return bdev->bd_block_size;
848}
849
850typedef struct {struct page *v;} Sector;
851
852unsigned char *read_dev_sector(struct block_device *, sector_t, Sector *);
853
854static inline void put_dev_sector(Sector p)
855{
856 page_cache_release(p.v);
857}
858
859struct work_struct;
860int kblockd_schedule_work(struct work_struct *work);
861void kblockd_flush_work(struct work_struct *work);
862
863#define MODULE_ALIAS_BLOCKDEV(major,minor) \
864 MODULE_ALIAS("block-major-" __stringify(major) "-" __stringify(minor))
865#define MODULE_ALIAS_BLOCKDEV_MAJOR(major) \
866 MODULE_ALIAS("block-major-" __stringify(major) "-*")
867
868
869#else
870
871
872
873#define buffer_heads_over_limit 0
874
875static inline long nr_blockdev_pages(void)
876{
877 return 0;
878}
879
880static inline void exit_io_context(void)
881{
882}
883
884struct io_context;
885static inline int put_io_context(struct io_context *ioc)
886{
887 return 1;
888}
889
890
891#endif
892
893#endif
894