mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-27 03:19:35 +03:00
Linux 3.9 compat: vfs_getattr takes two arguments
The function prototype of vfs_getattr previoulsy took struct vfsmount * and struct dentry * as arguments. These would always be defined together in a struct path *. torvalds/linux@3dadecce20 modified vfs_getattr to take struct path * is taken as an argument instead. Signed-off-by: Richard Yao <ryao@cs.stonybrook.edu> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
This commit is contained in:
parent
bc90df6688
commit
2a305c34c8
@ -89,6 +89,7 @@ AC_DEFUN([SPL_AC_CONFIG_KERNEL], [
|
||||
SPL_AC_SHRINK_CONTROL_STRUCT
|
||||
SPL_AC_RWSEM_SPINLOCK_IS_RAW
|
||||
SPL_AC_SCHED_RT_HEADER
|
||||
SPL_AC_2ARGS_VFS_GETATTR
|
||||
])
|
||||
|
||||
AC_DEFUN([SPL_AC_MODULE_SYMVERS], [
|
||||
@ -2237,3 +2238,34 @@ AC_DEFUN([SPL_AC_SCHED_RT_HEADER],
|
||||
AC_MSG_RESULT(no)
|
||||
])
|
||||
])
|
||||
|
||||
dnl #
|
||||
dnl # 3.9 API change,
|
||||
dnl # vfs_getattr() uses 2 args
|
||||
dnl # It takes struct path * instead of struct vfsmount * and struct dentry *
|
||||
dnl #
|
||||
AC_DEFUN([SPL_AC_2ARGS_VFS_GETATTR], [
|
||||
AC_MSG_CHECKING([whether vfs_getattr() wants])
|
||||
SPL_LINUX_TRY_COMPILE([
|
||||
#include <linux/fs.h>
|
||||
],[
|
||||
vfs_getattr((struct path *) NULL,
|
||||
(struct kstat *)NULL);
|
||||
],[
|
||||
AC_MSG_RESULT(2 args)
|
||||
AC_DEFINE(HAVE_2ARGS_VFS_GETATTR, 1,
|
||||
[vfs_getattr wants 2 args])
|
||||
],[
|
||||
SPL_LINUX_TRY_COMPILE([
|
||||
#include <linux/fs.h>
|
||||
],[
|
||||
vfs_getattr((struct vfsmount *)NULL,
|
||||
(struct dentry *)NULL,
|
||||
(struct kstat *)NULL);
|
||||
],[
|
||||
AC_MSG_RESULT(3 args)
|
||||
],[
|
||||
AC_MSG_ERROR(unknown)
|
||||
])
|
||||
])
|
||||
])
|
||||
|
@ -175,7 +175,11 @@ vn_open(const char *path, uio_seg_t seg, int flags, int mode,
|
||||
if (IS_ERR(fp))
|
||||
SRETURN(-PTR_ERR(fp));
|
||||
|
||||
#ifdef HAVE_2ARGS_VFS_GETATTR
|
||||
rc = vfs_getattr(&fp->f_path, &stat);
|
||||
#else
|
||||
rc = vfs_getattr(fp->f_path.mnt, fp->f_dentry, &stat);
|
||||
#endif
|
||||
if (rc) {
|
||||
filp_close(fp, 0);
|
||||
SRETURN(-rc);
|
||||
@ -602,7 +606,11 @@ vn_getattr(vnode_t *vp, vattr_t *vap, int flags, void *x3, void *x4)
|
||||
|
||||
fp = vp->v_file;
|
||||
|
||||
rc = vfs_getattr(fp->f_path.mnt, fp->f_dentry, &stat);
|
||||
#ifdef HAVE_2ARGS_VFS_GETATTR
|
||||
rc = vfs_getattr(&fp->f_path, &stat);
|
||||
#else
|
||||
rc = vfs_getattr(fp->f_path.mnt, fp->f_dentry, &stat);
|
||||
#endif
|
||||
if (rc)
|
||||
SRETURN(-rc);
|
||||
|
||||
@ -754,7 +762,12 @@ vn_getf(int fd)
|
||||
if (vp == NULL)
|
||||
SGOTO(out_fget, rc);
|
||||
|
||||
if (vfs_getattr(lfp->f_path.mnt, lfp->f_dentry, &stat))
|
||||
#ifdef HAVE_2ARGS_VFS_GETATTR
|
||||
rc = vfs_getattr(&lfp->f_path, &stat);
|
||||
#else
|
||||
rc = vfs_getattr(lfp->f_path.mnt, lfp->f_dentry, &stat);
|
||||
#endif
|
||||
if (rc)
|
||||
SGOTO(out_vnode, rc);
|
||||
|
||||
mutex_enter(&vp->v_lock);
|
||||
|
Loading…
Reference in New Issue
Block a user