~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Linux Cross Reference
Linux/include/linux/elevator.h

Version: ~ [ 2.4.0 ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 #ifndef _LINUX_ELEVATOR_H
  2 #define _LINUX_ELEVATOR_H
  3 
  4 #define ELEVATOR_DEBUG
  5 
  6 typedef void (elevator_fn) (struct request *, elevator_t *,
  7                             struct list_head *,
  8                             struct list_head *, int);
  9 
 10 typedef int (elevator_merge_fn) (request_queue_t *, struct request **,
 11                                  struct buffer_head *, int, int *, int *);
 12 
 13 typedef void (elevator_dequeue_fn) (struct request *);
 14 
 15 struct elevator_s
 16 {
 17         int sequence;
 18 
 19         int read_latency;
 20         int write_latency;
 21         int max_bomb_segments;
 22 
 23         unsigned int nr_segments;
 24         int read_pendings;
 25 
 26         elevator_fn * elevator_fn;
 27         elevator_merge_fn *elevator_merge_fn;
 28         elevator_dequeue_fn *dequeue_fn;
 29 
 30         unsigned int queue_ID;
 31 };
 32 
 33 void elevator_noop(struct request *, elevator_t *, struct list_head *, struct list_head *, int);
 34 int elevator_noop_merge(request_queue_t *, struct request **, struct buffer_head *, int, int *, int *);
 35 void elevator_noop_dequeue(struct request *);
 36 void elevator_linus(struct request *, elevator_t *, struct list_head *, struct list_head *, int);
 37 int elevator_linus_merge(request_queue_t *, struct request **, struct buffer_head *, int, int *, int *);
 38 
 39 typedef struct blkelv_ioctl_arg_s {
 40         int queue_ID;
 41         int read_latency;
 42         int write_latency;
 43         int max_bomb_segments;
 44 } blkelv_ioctl_arg_t;
 45 
 46 #define BLKELVGET   _IOR(0x12,106,sizeof(blkelv_ioctl_arg_t))
 47 #define BLKELVSET   _IOW(0x12,107,sizeof(blkelv_ioctl_arg_t))
 48 
 49 extern int blkelvget_ioctl(elevator_t *, blkelv_ioctl_arg_t *);
 50 extern int blkelvset_ioctl(elevator_t *, const blkelv_ioctl_arg_t *);
 51 
 52 extern void elevator_init(elevator_t *, elevator_t);
 53 
 54 /*
 55  * Return values from elevator merger
 56  */
 57 #define ELEVATOR_NO_MERGE       0
 58 #define ELEVATOR_FRONT_MERGE    1
 59 #define ELEVATOR_BACK_MERGE     2
 60 
 61 /*
 62  * This is used in the elevator algorithm.  We don't prioritise reads
 63  * over writes any more --- although reads are more time-critical than
 64  * writes, by treating them equally we increase filesystem throughput.
 65  * This turns out to give better overall performance.  -- sct
 66  */
 67 #define IN_ORDER(s1,s2)                         \
 68         ((((s1)->rq_dev == (s2)->rq_dev &&      \
 69            (s1)->sector < (s2)->sector)) ||     \
 70          (s1)->rq_dev < (s2)->rq_dev)
 71 
 72 static inline int elevator_request_latency(elevator_t * elevator, int rw)
 73 {
 74         int latency;
 75 
 76         latency = elevator->read_latency;
 77         if (rw != READ)
 78                 latency = elevator->write_latency;
 79 
 80         return latency;
 81 }
 82 
 83 #define ELEVATOR_NOOP                                           \
 84 ((elevator_t) {                                                 \
 85         0,                              /* sequence */          \
 86                                                                 \
 87         0,                              /* read_latency */      \
 88         0,                              /* write_latency */     \
 89         0,                              /* max_bomb_segments */ \
 90                                                                 \
 91         0,                              /* nr_segments */       \
 92         0,                              /* read_pendings */     \
 93                                                                 \
 94         elevator_noop,                  /* elevator_fn */       \
 95         elevator_noop_merge,            /* elevator_merge_fn */ \
 96         elevator_noop_dequeue,          /* dequeue_fn */        \
 97         })
 98 
 99 #define ELEVATOR_LINUS                                          \
100 ((elevator_t) {                                                 \
101         0,                              /* not used */          \
102                                                                 \
103         1000000,                                /* read passovers */    \
104         2000000,                                /* write passovers */   \
105         0,                              /* max_bomb_segments */ \
106                                                                 \
107         0,                              /* not used */          \
108         0,                              /* not used */          \
109                                                                 \
110         elevator_linus,                 /* elevator_fn */       \
111         elevator_linus_merge,           /* elevator_merge_fn */ \
112         elevator_noop_dequeue,          /* dequeue_fn */        \
113         })
114 
115 #endif
116 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.