mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-26 03:09:34 +03:00
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:
parent
3c20361075
commit
8f195a908f
21
config/kernel-lookup-nameidata.m4
Normal file
21
config/kernel-lookup-nameidata.m4
Normal 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)
|
||||||
|
])
|
||||||
|
])
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user