Merge mulgrave-w:git/scsi-misc-2.6
[safe/jmp/linux-2.6] / include / linux / blkdev.h
index ed0ffa6..427b0d6 100644 (file)
@@ -1,7 +1,6 @@
 #ifndef _LINUX_BLKDEV_H
 #define _LINUX_BLKDEV_H
 
-#include <linux/config.h>
 #include <linux/major.h>
 #include <linux/genhd.h>
 #include <linux/list.h>
@@ -17,6 +16,8 @@
 
 #include <asm/scatterlist.h>
 
+struct scsi_ioctl_command;
+
 struct request_queue;
 typedef struct request_queue request_queue_t;
 struct elevator_queue;
@@ -63,11 +64,17 @@ struct cfq_io_context {
        struct io_context *ioc;
 
        unsigned long last_end_request;
-       unsigned long last_queue;
+       sector_t last_request_pos;
+       unsigned long last_queue;
+
        unsigned long ttime_total;
        unsigned long ttime_samples;
        unsigned long ttime_mean;
 
+       unsigned int seek_samples;
+       u64 seek_total;
+       sector_t seek_mean;
+
        struct list_head queue_list;
 
        void (*dtor)(struct io_context *); /* destructor */
@@ -144,11 +151,9 @@ struct request {
        void *elevator_private;
        void *completion_data;
 
-       unsigned short ioprio;
-
        int rq_status;  /* should split this into a few status bits */
-       struct gendisk *rq_disk;
        int errors;
+       struct gendisk *rq_disk;
        unsigned long start_time;
 
        /* Number of scatter-gather DMA addr+len pairs after
@@ -163,8 +168,9 @@ struct request {
         */
        unsigned short nr_hw_segments;
 
+       unsigned short ioprio;
+
        int tag;
-       char *buffer;
 
        int ref_count;
        request_queue_t *q;
@@ -172,6 +178,7 @@ struct request {
 
        struct completion *waiting;
        void *special;
+       char *buffer;
 
        /*
         * when request is used as a packet command carrier
@@ -180,20 +187,14 @@ struct request {
        unsigned char cmd[BLK_MAX_CDB];
 
        unsigned int data_len;
-       void *data;
-
        unsigned int sense_len;
+       void *data;
        void *sense;
 
        unsigned int timeout;
        int retries;
 
        /*
-        * For Power Management requests
-        */
-       struct request_pm_state *pm;
-
-       /*
         * completion callback. end_io_data should be folded in with waiting
         */
        rq_end_io_fn *end_io;
@@ -234,6 +235,7 @@ enum rq_flag_bits {
        __REQ_PM_RESUME,        /* resume request */
        __REQ_PM_SHUTDOWN,      /* shutdown request */
        __REQ_ORDERED_COLOR,    /* is before or after barrier */
+       __REQ_RW_SYNC,          /* request is sync (O_DIRECT) */
        __REQ_NR_BITS,          /* stops here */
 };
 
@@ -263,6 +265,7 @@ enum rq_flag_bits {
 #define REQ_PM_RESUME  (1 << __REQ_PM_RESUME)
 #define REQ_PM_SHUTDOWN        (1 << __REQ_PM_SHUTDOWN)
 #define REQ_ORDERED_COLOR      (1 << __REQ_ORDERED_COLOR)
+#define REQ_RW_SYNC    (1 << __REQ_RW_SYNC)
 
 /*
  * State information carried for REQ_PM_SUSPEND and REQ_PM_RESUME
@@ -431,9 +434,6 @@ struct request_queue
 
 #define RQ_INACTIVE            (-1)
 #define RQ_ACTIVE              1
-#define RQ_SCSI_BUSY           0xffff
-#define RQ_SCSI_DONE           0xfffe
-#define RQ_SCSI_DISCONNECTING  0xffe0
 
 #define QUEUE_FLAG_CLUSTER     0       /* cluster several segments into 1 */
 #define QUEUE_FLAG_QUEUED      1       /* uses generic tag queueing */
@@ -605,6 +605,8 @@ extern void blk_plug_device(request_queue_t *);
 extern int blk_remove_plug(request_queue_t *);
 extern void blk_recount_segments(request_queue_t *, struct bio *);
 extern int scsi_cmd_ioctl(struct file *, struct gendisk *, unsigned int, void __user *);
+extern int sg_scsi_ioctl(struct file *, struct request_queue *,
+               struct gendisk *, struct scsi_ioctl_command __user *);
 extern void blk_start_queue(request_queue_t *q);
 extern void blk_stop_queue(request_queue_t *q);
 extern void blk_sync_queue(struct request_queue *q);
@@ -744,6 +746,8 @@ extern void blk_queue_free_tags(request_queue_t *);
 extern int blk_queue_resize_tags(request_queue_t *, int);
 extern void blk_queue_invalidate_tags(request_queue_t *);
 extern long blk_congestion_wait(int rw, long timeout);
+extern struct blk_queue_tag *blk_init_tags(int);
+extern void blk_free_tags(struct blk_queue_tag *);
 
 extern void blk_rq_bio_prep(request_queue_t *, struct request *, struct bio *);
 extern int blkdev_issue_flush(struct block_device *, sector_t *);