1 #ifndef BINJECT_KCOMPAT_H
2 #define BINJECT_KCOMPAT_H
4 #include <linux/version.h>
5 #include <linux/slab.h>
7 struct bio *binject_map_bio(struct request_queue *q, struct block_device *bdev,
8 unsigned long uaddr, unsigned int len, int to_vm,
11 #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 18)
12 #define binject_device_create device_create
14 #define binject_device_create(a, b, c, d, args...) ( \
16 struct device *__dev; \
17 __dev = device_create((a), (b), (c), ##args); \
19 dev_set_drvdata(__dev, (d)); \
25 static inline unsigned int binject_get_bs(struct request_queue *q)
27 #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 18)
28 return queue_physical_block_size(q);
30 return queue_hardsect_size(q);
34 static inline void binject_mark_bio_write(struct bio *bio)
36 #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 35)
37 bio->bi_rw |= REQ_WRITE;
39 bio->bi_rw |= (1 << BIO_RW);
43 #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 26)
44 static inline ktime_t ktime_get(void)
49 return timespec_to_ktime(t);
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 *))
58 return kmem_cache_create(name, obj_size, 0, flags, NULL);
60 #define KCOMPAT_OLD_SLAB
61 void (*init_once)(void *, kmem_cache_t *, unsigned long))
63 return kmem_cache_create(name, obj_size, 0, flags, init_once, NULL);
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)
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)
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
107 #error The kernel is too old