Fixup ioctls
[binject.git] / kcompat.h
1 #ifndef BINJECT_KCOMPAT_H
2 #define BINJECT_KCOMPAT_H
3
4 #include <linux/version.h>
5 #include <linux/slab.h>
6
7 struct bio *binject_map_bio(struct request_queue *q, struct block_device *bdev,
8                             unsigned long uaddr, unsigned int len, int to_vm,
9                             gfp_t gfp_mask);
10
11 #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 18)
12 #define binject_device_create   device_create
13 #else
14 #define binject_device_create(a, b, c, d, args...) (            \
15 {                                                               \
16         struct device *__dev;                                   \
17         __dev = device_create((a), (b), (c), ##args);           \
18         if (!IS_ERR(__dev))                                     \
19                 dev_set_drvdata(__dev, (d));                    \
20         __dev;                                                  \
21 }                                                               \
22 )
23 #endif
24
25 static inline unsigned int binject_get_bs(struct request_queue *q)
26 {
27 #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 18)
28         return queue_physical_block_size(q);
29 #else
30         return queue_hardsect_size(q);
31 #endif
32 }
33
34 static inline void binject_mark_bio_write(struct bio *bio)
35 {
36 #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 35)
37         bio->bi_rw |= REQ_WRITE;
38 #else
39         bio->bi_rw |= (1 << BIO_RW);
40 #endif
41 }
42
43 #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 26)
44 static inline ktime_t ktime_get(void)
45 {
46         struct timespec t;
47
48         ktime_get_ts(&t);
49         return timespec_to_ktime(t);
50 }
51 #endif
52
53 static inline struct kmem_cache *
54 binject_create_slab(const char *name, size_t obj_size, unsigned long flags,
55 #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 26)
56                     void (*init_once)(void *))
57 {
58         return kmem_cache_create(name, obj_size, 0, flags, NULL);
59 #else
60 #define KCOMPAT_OLD_SLAB
61                     void (*init_once)(void *, kmem_cache_t *, unsigned long))
62 {
63         return kmem_cache_create(name, obj_size, 0, flags, init_once, NULL);
64 #endif
65 }
66
67 #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 35)
68 #define B_REQ_WRITE                     REQ_WRITE
69 #define B_REQ_SYNC                      REQ_SYNC
70 #define B_REQ_UNPLUG                    REQ_UNPLUG
71 #define B_REQ_NOIDLE                    REQ_NOIDLE
72 #define B_REQ_HARDBARRIER               REQ_HARDBARRIER
73 #define B_REQ_META                      REQ_META
74 #define B_REQ_RAHEAD                    REQ_RAHEAD
75 #define B_REQ_FAILFAST_DEV              REQ_FAILFAST_DEV
76 #define B_REQ_FAILFAST_TRANSPORT        REQ_FAILFAST_TRANSPORT
77 #define B_REQ_FAILFAST_DRIVER           REQ_FAILFAST_DRIVER
78 #define B_REQ_DISCARD                   REQ_DISCARD
79 #define B_REQ_FLUSH                     REQ_FLUSH
80 #elif LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 34)
81 #define B_REQ_WRITE                     (1 << BIO_RW)
82 #define B_REQ_SYNC                      (1 << BIO_RW_SYNCIO)
83 #define B_REQ_UNPLUG                    (1 << BIO_RW_UNPLUG)
84 #define B_REQ_NOIDLE                    (1 << BIO_RW_NOIDLE)
85 #define B_REQ_HARDBARRIER               (1 << BIO_RW_BARRIER)
86 #define B_REQ_META                      (1 << BIO_RW_META)
87 #define B_REQ_RAHEAD                    (1 << BIO_RW_AHEAD)
88 #define B_REQ_FAILFAST_DEV              (1 << BIO_RW_FAILFAST_DEV)
89 #define B_REQ_FAILFAST_TRANSPORT        (1 << BIO_RW_FAILFAST_TRANSPORT)
90 #define B_REQ_FAILFAST_DRIVER           (1 << BIO_RW_FAILFAST_DRIVER)
91 #define B_REQ_DISCARD                   (1 << BIO_RW_DISCARD)
92 #define B_REQ_FLUSH                     0
93 #elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 18)
94 #define B_REQ_WRITE                     (1 << BIO_RW)
95 #define B_REQ_SYNC                      (1 << BIO_RW_SYNC)
96 #define B_REQ_UNPLUG                    0
97 #define B_REQ_NOIDLE                    0
98 #define B_REQ_HARDBARRIER               (1 << BIO_RW_BARRIER)
99 #define B_REQ_META                      0
100 #define B_REQ_RAHEAD                    (1 << BIO_RW_AHEAD)
101 #define B_REQ_FAILFAST_DEV              (1 << BIO_RW_FAILFAST)
102 #define B_REQ_FAILFAST_TRANSPORT        (1 << BIO_RW_FAILFAST)
103 #define B_REQ_FAILFAST_DRIVER           (1 << BIO_RW_FAILFAST)
104 #define B_REQ_DISCARD                   0
105 #define B_REQ_FLUSH                     0
106 #else
107 #error The kernel is too old
108 #endif
109
110 #endif