]> Pileus Git - ~andy/linux/blobdiff - include/linux/blkdev.h
Merge commit 'v2.6.38-rc6' into for-2.6.39/core
[~andy/linux] / include / linux / blkdev.h
index 36ab42c9bb991566dc5004fad9ca3c0c958bfeb0..e3ee74fc59030fe6b4c2c15bc8c4ef85a03e0096 100644 (file)
@@ -108,13 +108,20 @@ struct request {
 
        /*
         * Three pointers are available for the IO schedulers, if they need
-        * more they have to dynamically allocate it.
+        * more they have to dynamically allocate it.  Flush requests are
+        * never put on the IO scheduler. So let the flush fields share
+        * space with the three elevator_private pointers.
         */
-       void *elevator_private;
-       void *elevator_private2;
-       void *elevator_private3;
+       union {
+               void *elevator_private[3];
+               struct {
+                       unsigned int            seq;
+                       struct list_head        list;
+               } flush;
+       };
 
        struct gendisk *rq_disk;
+       struct hd_struct *part;
        unsigned long start_time;
 #ifdef CONFIG_BLK_CGROUP
        unsigned long long start_time_ns;
@@ -362,11 +369,12 @@ struct request_queue
         * for flush operations
         */
        unsigned int            flush_flags;
-       unsigned int            flush_seq;
-       int                     flush_err;
+       unsigned int            flush_pending_idx:1;
+       unsigned int            flush_running_idx:1;
+       unsigned long           flush_pending_since;
+       struct list_head        flush_queue[2];
+       struct list_head        flush_data_in_flight;
        struct request          flush_rq;
-       struct request          *orig_flush_rq;
-       struct list_head        pending_flushes;
 
        struct mutex            sysfs_lock;
 
@@ -646,7 +654,6 @@ static inline void rq_flush_dcache_pages(struct request *rq)
 
 extern int blk_register_queue(struct gendisk *disk);
 extern void blk_unregister_queue(struct gendisk *disk);
-extern void register_disk(struct gendisk *dev);
 extern void generic_make_request(struct bio *bio);
 extern void blk_rq_init(struct request_queue *q, struct request *rq);
 extern void blk_put_request(struct request *);
@@ -1256,6 +1263,9 @@ struct block_device_operations {
        int (*compat_ioctl) (struct block_device *, fmode_t, unsigned, unsigned long);
        int (*direct_access) (struct block_device *, sector_t,
                                                void **, unsigned long *);
+       unsigned int (*check_events) (struct gendisk *disk,
+                                     unsigned int clearing);
+       /* ->media_changed() is DEPRECATED, use ->check_events() instead */
        int (*media_changed) (struct gendisk *);
        void (*unlock_native_capacity) (struct gendisk *);
        int (*revalidate_disk) (struct gendisk *);