1 From 50a0749eba31e821a7edf286f1e3b149f7d13c59 Mon Sep 17 00:00:00 2001
2 From: Richard Yao <ryao@gentoo.org>
3 Date: Mon, 25 Nov 2013 11:22:33 -0500
4 Subject: [PATCH] Linux 3.13 compat: Pass NULL for new delegated inode argument
6 This check was originally added for SLES10, a093c6a, to check for
7 a 'struct vfsmount *' argument which they added. However, since
8 SLES10 is based on a 2.6.16 kernel which is no longer supported
9 this functionality was dropped. The checks were refactored to
10 support Linux 3.13 without concern for historical versions.
12 Signed-off-by: Richard Yao <ryao@gentoo.org>
13 Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
16 config/spl-build.m4 | 52 ++++++++++++++++++++++++++++++++++++++++----------
17 module/spl/spl-vnode.c | 22 ++++++++++++---------
18 2 files changed, 55 insertions(+), 19 deletions(-)
20 diff --git a/config/spl-build.m4 b/config/spl-build.m4
21 index 7d744db..8426780 100644
22 --- a/config/spl-build.m4
23 +++ b/config/spl-build.m4
24 @@ -1842,41 +1842,73 @@ AC_DEFUN([SPL_AC_SET_FS_PWD_WITH_CONST],
25 EXTRA_KCFLAGS="$tmp_flags"
29 -dnl # SLES API change, never adopted in mainline,
30 -dnl # Third 'struct vfsmount *' argument removed.
32 AC_DEFUN([SPL_AC_2ARGS_VFS_UNLINK],
33 [AC_MSG_CHECKING([whether vfs_unlink() wants 2 args])
34 SPL_LINUX_TRY_COMPILE([
37 - vfs_unlink(NULL, NULL);
38 + vfs_unlink((struct inode *) NULL, (struct dentry *) NULL);
41 AC_DEFINE(HAVE_2ARGS_VFS_UNLINK, 1,
42 [vfs_unlink() wants 2 args])
46 + dnl # Linux 3.13 API change
47 + dnl # Added delegated inode
49 + AC_MSG_CHECKING([whether vfs_unlink() wants 3 args])
50 + SPL_LINUX_TRY_COMPILE([
51 + #include <linux/fs.h>
53 + vfs_unlink((struct inode *) NULL,
54 + (struct dentry *) NULL,
55 + (struct inode **) NULL);
58 + AC_DEFINE(HAVE_3ARGS_VFS_UNLINK, 1,
59 + [vfs_unlink() wants 3 args])
68 -dnl # SLES API change, never adopted in mainline,
69 -dnl # Third and sixth 'struct vfsmount *' argument removed.
71 AC_DEFUN([SPL_AC_4ARGS_VFS_RENAME],
72 [AC_MSG_CHECKING([whether vfs_rename() wants 4 args])
73 SPL_LINUX_TRY_COMPILE([
76 - vfs_rename(NULL, NULL, NULL, NULL);
77 + vfs_rename((struct inode *) NULL, (struct dentry *) NULL,
78 + (struct inode *) NULL, (struct dentry *) NULL);
81 AC_DEFINE(HAVE_4ARGS_VFS_RENAME, 1,
82 [vfs_rename() wants 4 args])
86 + dnl # Linux 3.13 API change
87 + dnl # Added delegated inode
89 + AC_MSG_CHECKING([whether vfs_rename() wants 5 args])
90 + SPL_LINUX_TRY_COMPILE([
91 + #include <linux/fs.h>
93 + vfs_rename((struct inode *) NULL,
94 + (struct dentry *) NULL,
95 + (struct inode *) NULL,
96 + (struct dentry *) NULL,
97 + (struct inode **) NULL);
100 + AC_DEFINE(HAVE_5ARGS_VFS_RENAME, 1,
101 + [vfs_rename() wants 5 args])
108 diff --git a/module/spl/spl-vnode.c b/module/spl/spl-vnode.c
109 index 0784ff2..5496067 100644
110 --- a/module/spl/spl-vnode.c
111 +++ b/module/spl/spl-vnode.c
116 +#ifdef HAVE_2ARGS_VFS_UNLINK
117 rc = vfs_unlink(parent.dentry->d_inode, dentry);
119 + rc = vfs_unlink(parent.dentry->d_inode, dentry, NULL);
120 +#endif /* HAVE_2ARGS_VFS_UNLINK */
124 @@ -412,10 +416,10 @@
126 #ifdef HAVE_4ARGS_VFS_RENAME
127 rc = vfs_rename(old_dir->d_inode, old_dentry,
128 - new_dir->d_inode, new_dentry);
129 + new_dir->d_inode, new_dentry);
131 - rc = vfs_rename(old_dir->d_inode, old_dentry, oldnd.nd_mnt,
132 - new_dir->d_inode, new_dentry, newnd.nd_mnt);
133 + rc = vfs_rename(old_dir->d_inode, old_dentry,
134 + new_dir->d_inode, new_dentry, NULL);
135 #endif /* HAVE_4ARGS_VFS_RENAME */
137 unlock_rename(new_dir, old_dir);
140 atomic_inc(&inode->i_count);
141 #ifdef HAVE_2ARGS_VFS_UNLINK
142 - rc = vfs_unlink(nd.nd_dentry->d_inode, dentry);
143 + rc = vfs_unlink(nd.nd_dentry->d_inode, dentry);
145 - rc = vfs_unlink(nd.nd_dentry->d_inode, dentry, nd.nd_mnt);
146 + rc = vfs_unlink(nd.nd_dentry->d_inode, dentry, NULL);
147 #endif /* HAVE_2ARGS_VFS_UNLINK */
150 @@ -571,11 +575,11 @@
153 #ifdef HAVE_4ARGS_VFS_RENAME
154 - rc = vfs_rename(old_dir->d_inode, old_dentry,
155 - new_dir->d_inode, new_dentry);
156 + rc = vfs_rename(old_dir->d_inode, old_dentry,
157 + new_dir->d_inode, new_dentry);
159 - rc = vfs_rename(old_dir->d_inode, old_dentry, oldnd.nd_mnt,
160 - new_dir->d_inode, new_dentry, newnd.nd_mnt);
161 + rc = vfs_rename(old_dir->d_inode, old_dentry,
162 + new_dir->d_inode, new_dentry, NULL);
163 #endif /* HAVE_4ARGS_VFS_RENAME */
169 From 3e96de17d723d6f6c9e2fd04b059b50d4e0bbef0 Mon Sep 17 00:00:00 2001
170 From: Richard Yao <ryao@gentoo.org>
171 Date: Thu, 8 Aug 2013 04:30:55 -0400
172 Subject: [PATCH] Linux 3.13 compat: Remove unused flags variable from
175 Content-Type: text/plain; charset=UTF-8
176 Content-Transfer-Encoding: 8bit
178 GCC 4.8.1 complained about an unused flags variable when building
179 against Linux 2.6.26.8:
181 /var/tmp/portage/sys-kernel/spl-9999/work/spl-9999/module/spl/../../module/spl/spl-condvar.c:
182 In function ‘__cv_init’:
183 /var/tmp/portage/sys-kernel/spl-9999/work/spl-9999/module/spl/../../module/spl/spl-condvar.c:39:6:
184 error: variable ‘flags’ set but not used
185 [-Werror=unused-but-set-variable]
186 int flags = KM_SLEEP;
188 cc1: all warnings being treated as errors
190 Additionally, the superfluous code uses a preempt_count variable that is
191 no longer available on Linux 3.13. Deleting the unnecessary code fixes a
192 Linux 3.13 compatibility issue.
194 Signed-off-by: Richard Yao <ryao@gentoo.org>
195 Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
198 module/spl/spl-condvar.c | 8 --------
199 1 file changed, 8 deletions(-)
201 diff --git a/module/spl/spl-condvar.c b/module/spl/spl-condvar.c
202 index 283648a..8236412 100644
203 --- a/module/spl/spl-condvar.c
204 +++ b/module/spl/spl-condvar.c
207 __cv_init(kcondvar_t *cvp, char *name, kcv_type_t type, void *arg)
209 - int flags = KM_SLEEP;
213 ASSERT(name == NULL);
215 atomic_set(&cvp->cv_refs, 1);
216 cvp->cv_mutex = NULL;
218 - /* We may be called when there is a non-zero preempt_count or
219 - * interrupts are disabled is which case we must not sleep.
221 - if (current_thread_info()->preempt_count || irqs_disabled())
222 - flags = KM_NOSLEEP;
226 EXPORT_SYMBOL(__cv_init);