])
])
+# vfs_symlink seems to have started out with 3 args until 2.6.7 where a
+# "mode" argument was added, but then again, in some later version it was
+# removed
+AC_DEFUN([LC_4ARGS_VFS_SYMLINK],
+[AC_MSG_CHECKING([if vfs_symlink wants 4 args])
+LB_LINUX_TRY_COMPILE([
+ #include <linux/fs.h>
+],[
+ struct inode *dir;
+ struct dentry *dentry;
+ const char *oldname = NULL;
+ int mode = 0;
+
+ vfs_symlink(dir, dentry, oldname, mode);
+],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_4ARGS_VFS_SYMLINK, 1,
+ [vfs_symlink wants 4 args])
+],[
+ AC_MSG_RESULT(no)
+])
+])
+
#
# LC_PROG_LINUX
#
LC_FUNC_RCU
LC_PERCPU_COUNTER
LC_QUOTA64
+ LC_4ARGS_VFS_SYMLINK
# does the kernel have VFS intent patches?
LC_VFS_INTENT_PATCHES
# 2.6.25
LC_MAPPING_CAP_WRITEBACK_DIRTY
-
+
# 2.6.24
LC_HAVE_MMTYPES_H
LC_BIO_ENDIO_2ARG
LC_FH_TO_DENTRY
LC_PROCFS_DELETED
-
+
# 2.6.26
LC_FS_STRUCT_USE_PATH
LC_RCU_LIST_SAFE
#define KIOBUF_GET_BLOCKS(k) ((k)->blocks)
#endif
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,7))
-#define ll_set_dflags(dentry, flags) do { dentry->d_vfs_flags |= flags; } while(0)
+#ifdef HAVE_SECURITY_PLUG
+#define ll_vfs_symlink(dir, dentry, mnt, path, mode) \
+ vfs_symlink(dir, dentry, mnt, path, mode)
+#else
+#ifdef HAVE_4ARGS_VFS_SYMLINK
+#define ll_vfs_symlink(dir, dentry, mnt, path, mode) \
+ vfs_symlink(dir, dentry, path, mode)
+#else
#define ll_vfs_symlink(dir, dentry, mnt, path, mode) \
vfs_symlink(dir, dentry, path)
+#endif
+#endif
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,7))
+#define ll_set_dflags(dentry, flags) do { dentry->d_vfs_flags |= flags; } while(0)
#else
#define ll_set_dflags(dentry, flags) do { \
spin_lock(&dentry->d_lock); \
dentry->d_flags |= flags; \
spin_unlock(&dentry->d_lock); \
} while(0)
-#ifdef HAVE_SECURITY_PLUG
-#define ll_vfs_symlink(dir, dentry, mnt, path, mode) \
- vfs_symlink(dir, dentry, mnt, path, mode)
-#else
-#define ll_vfs_symlink(dir, dentry, mnt, path, mode) \
- vfs_symlink(dir, dentry, path, mode)
-#endif
#endif
#ifndef container_of