1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37#ifndef _LINUX_COMPAT25_H
38#define _LINUX_COMPAT25_H
39
40#include <linux/fs_struct.h>
41#include <linux/namei.h>
42#include <linux/libcfs/linux/portals_compat25.h>
43
44#include <linux/lustre_patchless_compat.h>
45
46# define LOCK_FS_STRUCT(fs) spin_lock(&(fs)->lock)
47# define UNLOCK_FS_STRUCT(fs) spin_unlock(&(fs)->lock)
48
49static inline void ll_set_fs_pwd(struct fs_struct *fs, struct vfsmount *mnt,
50 struct dentry *dentry)
51{
52 struct path path;
53 struct path old_pwd;
54
55 path.mnt = mnt;
56 path.dentry = dentry;
57 LOCK_FS_STRUCT(fs);
58 old_pwd = fs->pwd;
59 path_get(&path);
60 fs->pwd = path;
61 UNLOCK_FS_STRUCT(fs);
62
63 if (old_pwd.dentry)
64 path_put(&old_pwd);
65}
66
67
68
69
70
71
72#define ATTR_BLOCKS (1 << 27)
73
74#define current_ngroups current_cred()->group_info->ngroups
75#define current_groups current_cred()->group_info->small_block
76
77
78
79
80
81
82#ifndef MODULE
83#undef module_init
84#define module_init(a) late_initcall(a)
85#endif
86
87
88#define LTIME_S(time) (time.tv_sec)
89
90
91# define inode_dio_write_done(i) do {} while (0)
92# define inode_dio_read(i) atomic_inc(&(i)->i_dio_count)
93
94
95#define TREE_READ_LOCK_IRQ(mapping) spin_lock_irq(&(mapping)->tree_lock)
96#define TREE_READ_UNLOCK_IRQ(mapping) spin_unlock_irq(&(mapping)->tree_lock)
97
98#ifndef FS_HAS_FIEMAP
99#define FS_HAS_FIEMAP (0)
100#endif
101
102#define ll_vfs_rmdir(dir,entry,mnt) vfs_rmdir(dir,entry)
103#define ll_vfs_mkdir(inode,dir,mnt,mode) vfs_mkdir(inode,dir,mode)
104#define ll_vfs_link(old,mnt,dir,new,mnt1) vfs_link(old,dir,new)
105#define ll_vfs_unlink(inode,entry,mnt) vfs_unlink(inode,entry)
106#define ll_vfs_mknod(dir,entry,mnt,mode,dev) vfs_mknod(dir,entry,mode,dev)
107#define ll_security_inode_unlink(dir,entry,mnt) security_inode_unlink(dir,entry)
108#define ll_vfs_rename(old, old_dir, mnt, new, new_dir, mnt1) \
109 vfs_rename(old, old_dir, new, new_dir, NULL, 0)
110
111#define cfs_bio_io_error(a,b) bio_io_error((a))
112#define cfs_bio_endio(a,b,c) bio_endio((a),(c))
113
114#define cfs_fs_pwd(fs) ((fs)->pwd.dentry)
115#define cfs_fs_mnt(fs) ((fs)->pwd.mnt)
116#define cfs_path_put(nd) path_put(&(nd)->path)
117
118
119#ifndef SLAB_DESTROY_BY_RCU
120#define SLAB_DESTROY_BY_RCU 0
121#endif
122
123
124
125static inline int
126ll_quota_on(struct super_block *sb, int off, int ver, char *name, int remount)
127{
128 int rc;
129
130 if (sb->s_qcop->quota_on) {
131 struct path path;
132
133 rc = kern_path(name, LOOKUP_FOLLOW, &path);
134 if (!rc)
135 return rc;
136 rc = sb->s_qcop->quota_on(sb, off, ver
137 , &path
138 );
139 path_put(&path);
140 return rc;
141 }
142 else
143 return -ENOSYS;
144}
145
146static inline int ll_quota_off(struct super_block *sb, int off, int remount)
147{
148 if (sb->s_qcop->quota_off) {
149 return sb->s_qcop->quota_off(sb, off
150 );
151 }
152 else
153 return -ENOSYS;
154}
155
156
157# define ll_vfs_dq_init dquot_initialize
158# define ll_vfs_dq_drop dquot_drop
159# define ll_vfs_dq_transfer dquot_transfer
160# define ll_vfs_dq_off(sb, remount) dquot_suspend(sb, -1)
161
162
163
164
165
166#define queue_max_phys_segments(rq) queue_max_segments(rq)
167#define queue_max_hw_segments(rq) queue_max_segments(rq)
168
169
170#define ll_d_hlist_node hlist_node
171#define ll_d_hlist_empty(list) hlist_empty(list)
172#define ll_d_hlist_entry(ptr, type, name) hlist_entry(ptr.first, type, name)
173#define ll_d_hlist_for_each(tmp, i_dentry) hlist_for_each(tmp, i_dentry)
174#define ll_d_hlist_for_each_entry(dentry, p, i_dentry, alias) \
175 p = NULL; hlist_for_each_entry(dentry, i_dentry, alias)
176
177
178#define bio_hw_segments(q, bio) 0
179
180
181#define ll_pagevec_init(pv, cold) do {} while (0)
182#define ll_pagevec_add(pv, pg) (0)
183#define ll_pagevec_lru_add_file(pv) do {} while (0)
184
185
186#ifndef QUOTA_OK
187# define QUOTA_OK 0
188#endif
189#ifndef NO_QUOTA
190# define NO_QUOTA (-EDQUOT)
191#endif
192
193#ifndef SEEK_DATA
194#define SEEK_DATA 3
195#endif
196#ifndef SEEK_HOLE
197#define SEEK_HOLE 4
198#endif
199
200#ifndef FMODE_UNSIGNED_OFFSET
201#define FMODE_UNSIGNED_OFFSET ((__force fmode_t)0x2000)
202#endif
203
204#if !defined(_ASM_GENERIC_BITOPS_EXT2_NON_ATOMIC_H_) && !defined(ext2_set_bit)
205# define ext2_set_bit __test_and_set_bit_le
206# define ext2_clear_bit __test_and_clear_bit_le
207# define ext2_test_bit test_bit_le
208# define ext2_find_first_zero_bit find_first_zero_bit_le
209# define ext2_find_next_zero_bit find_next_zero_bit_le
210#endif
211
212#ifdef ATTR_TIMES_SET
213# define TIMES_SET_FLAGS (ATTR_MTIME_SET | ATTR_ATIME_SET | ATTR_TIMES_SET)
214#else
215# define TIMES_SET_FLAGS (ATTR_MTIME_SET | ATTR_ATIME_SET)
216#endif
217
218
219
220
221
222
223
224
225
226#include <linux/version.h>
227static inline int ll_namei_to_lookup_intent_flag(int flag)
228{
229#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 1, 0)
230 flag = (flag & ~O_ACCMODE) | OPEN_FMODE(flag);
231#endif
232 return flag;
233}
234
235#include <linux/fs.h>
236
237# define ll_umode_t umode_t
238
239#include <linux/dcache.h>
240
241# define ll_dirty_inode(inode, flag) (inode)->i_sb->s_op->dirty_inode((inode), flag)
242
243#endif
244