Whamcloud - gitweb
LU-1994 kernel: 3.6 dentry_open uses struct path as first arg
authorPeng Tao <tao.peng@emc.com>
Tue, 28 Aug 2012 16:08:17 +0000 (00:08 +0800)
committerOleg Drokin <green@whamcloud.com>
Mon, 17 Dec 2012 06:53:05 +0000 (01:53 -0500)
3.6 dentry_open uses struct path as first argument.
see kernel commit 765927b2 for details.

Signed-off-by: Peng Tao <tao.peng@emc.com>
Change-Id: Ib69021356b1483abfcc49f644260b1dcbb57f76b
Reviewed-on: http://review.whamcloud.com/4386
Tested-by: Hudson
Reviewed-by: Lai Siyao <laisiyao@whamcloud.com>
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Yang Sheng <yang.sheng@intel.com>
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
lustre/autoconf/lustre-core.m4
lustre/include/linux/lustre_compat25.h

index 0412c16..4bf9a02 100644 (file)
@@ -2141,6 +2141,30 @@ EXTRA_KCFLAGS="$tmp_flags"
 ])
 
 #
+# 3.6 dentry_open uses struct path as first argument
+# see kernel commit 765927b2
+#
+AC_DEFUN([LC_DENTRY_OPEN_USE_PATH],
+[AC_MSG_CHECKING([if dentry_open uses struct path as first argument])
+tmp_flags="$EXTRA_KCFLAGS"
+EXTRA_KCFLAGS="-Werror"
+LB_LINUX_TRY_COMPILE([
+       #include <linux/fs.h>
+       #include <linux/path.h>
+],[
+       struct path path;
+       dentry_open(&path, 0, NULL);
+],[
+       AC_DEFINE(HAVE_DENTRY_OPEN_USE_PATH, 1,
+                 [dentry_open uses struct path as first argument])
+       AC_MSG_RESULT([yes])
+],[
+       AC_MSG_RESULT([no])
+])
+EXTRA_KCFLAGS="$tmp_flags"
+])
+
+#
 # LC_PROG_LINUX
 #
 # Lustre linux kernel checks
@@ -2311,6 +2335,7 @@ AC_DEFUN([LC_PROG_LINUX],
 
         # 3.6
         LC_HAVE_DENTRY_D_ALIAS_HLIST
+        LC_DENTRY_OPEN_USE_PATH
 
         #
         if test x$enable_server = xyes ; then
index fe3d08f..398f571 100644 (file)
@@ -140,11 +140,19 @@ static inline void ll_set_fs_pwd(struct fs_struct *fs, struct vfsmount *mnt,
 #define ll_blkdev_put(a, b) blkdev_put(a)
 #endif
 
-#ifdef HAVE_DENTRY_OPEN_4ARGS
-#define ll_dentry_open(a, b, c, d) dentry_open(a, b, c, d)
+static inline struct file *ll_dentry_open(struct dentry *dentry,
+                                         struct vfsmount *mnt, int flags,
+                                         const struct cred *cred)
+{
+#ifdef HAVE_DENTRY_OPEN_USE_PATH
+       struct path path = { .mnt = mnt, .dentry = dentry };
+       return dentry_open(&path, flags, cred);
+#elif defined HAVE_DENTRY_OPEN_4ARGS
+       return dentry_open(dentry, mnt, flags, cred);
 #else
-#define ll_dentry_open(a, b, c, d) dentry_open(a, b, c)
+       return dentry_open(dentry, mnt, flags);
 #endif
+}
 
 #ifdef HAVE_SECURITY_PLUG
 #define ll_vfs_symlink(dir, dentry, mnt, path, mode) \