Linux 3.6 compat, iops->lookup()

As of Linux commit 00cd8dd3bf95f2cc8435b4cac01d9995635c6d0b the
struct nameidata is no longer passed to iops->lookup.  Instead
only the inamedata->flags are passed.

ZFS like almost all Linux fileystems never made use of this so
only the prototype needs to be wrapped for compatibility.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Issue #873
This commit is contained in:
Yuxuan Shui 2012-10-12 22:41:06 +08:00 committed by Brian Behlendorf
parent 3c20361075
commit 8f195a908f
4 changed files with 41 additions and 0 deletions

View File

@ -0,0 +1,21 @@
dnl #
dnl # 3.6 API change
dnl #
AC_DEFUN([ZFS_AC_KERNEL_LOOKUP_NAMEIDATA], [
AC_MSG_CHECKING([whether iops->lookup() takes struct nameidata])
ZFS_LINUX_TRY_COMPILE([
#include <linux/fs.h>
],[
struct dentry * (*inode_lookup) (struct inode *,struct dentry *,
struct nameidata *) = NULL;
struct inode_operations iops __attribute__ ((unused)) = {
.lookup = inode_lookup,
};
],[
AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_LOOKUP_NAMEIDATA, 1,
[iops->lookup() operation takes nameidata])
],[
AC_MSG_RESULT(no)
])
])

View File

@ -49,6 +49,7 @@ AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [
ZFS_AC_KERNEL_NR_CACHED_OBJECTS ZFS_AC_KERNEL_NR_CACHED_OBJECTS
ZFS_AC_KERNEL_FREE_CACHED_OBJECTS ZFS_AC_KERNEL_FREE_CACHED_OBJECTS
ZFS_AC_KERNEL_FALLOCATE ZFS_AC_KERNEL_FALLOCATE
ZFS_AC_KERNEL_LOOKUP_NAMEIDATA
ZFS_AC_KERNEL_TRUNCATE_RANGE ZFS_AC_KERNEL_TRUNCATE_RANGE
ZFS_AC_KERNEL_CREATE_UMODE_T ZFS_AC_KERNEL_CREATE_UMODE_T
ZFS_AC_KERNEL_AUTOMOUNT ZFS_AC_KERNEL_AUTOMOUNT

View File

@ -143,7 +143,11 @@ zpl_root_getattr(struct vfsmount *mnt, struct dentry *dentry,
} }
static struct dentry * static struct dentry *
#ifdef HAVE_LOOKUP_NAMEIDATA
zpl_root_lookup(struct inode *dip, struct dentry *dentry, struct nameidata *nd) zpl_root_lookup(struct inode *dip, struct dentry *dentry, struct nameidata *nd)
#else
zpl_root_lookup(struct inode *dip, struct dentry *dentry, unsigned int flags)
#endif
{ {
cred_t *cr = CRED(); cred_t *cr = CRED();
struct inode *ip; struct inode *ip;
@ -180,8 +184,14 @@ const struct inode_operations zpl_ops_root = {
}; };
static struct dentry * static struct dentry *
#ifdef HAVE_LOOKUP_NAMEIDATA
zpl_snapdir_lookup(struct inode *dip, struct dentry *dentry, zpl_snapdir_lookup(struct inode *dip, struct dentry *dentry,
struct nameidata *nd) struct nameidata *nd)
#else
zpl_snapdir_lookup(struct inode *dip, struct dentry *dentry,
unsigned int flags)
#endif
{ {
cred_t *cr = CRED(); cred_t *cr = CRED();
struct inode *ip; struct inode *ip;
@ -410,8 +420,13 @@ const struct dentry_operations zpl_dops_snapdirs = {
#endif /* HAVE_AUTOMOUNT */ #endif /* HAVE_AUTOMOUNT */
static struct dentry * static struct dentry *
#ifdef HAVE_LOOKUP_NAMEIDATA
zpl_shares_lookup(struct inode *dip, struct dentry *dentry, zpl_shares_lookup(struct inode *dip, struct dentry *dentry,
struct nameidata *nd) struct nameidata *nd)
#else
zpl_shares_lookup(struct inode *dip, struct dentry *dentry,
unsigned int flags)
#endif
{ {
cred_t *cr = CRED(); cred_t *cr = CRED();
struct inode *ip = NULL; struct inode *ip = NULL;

View File

@ -31,7 +31,11 @@
static struct dentry * static struct dentry *
#ifdef HAVE_LOOKUP_NAMEIDATA
zpl_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd) zpl_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd)
#else
zpl_lookup(struct inode *dir, struct dentry *dentry, unsigned int flags)
#endif
{ {
cred_t *cr = CRED(); cred_t *cr = CRED();
struct inode *ip; struct inode *ip;