mirror of
https://git.openafs.org/openafs.git
synced 2025-01-18 06:50:12 +00:00
Linux v4.11: getattr takes struct path
With Linux commit a528d35e8bfcc521d7cb70aaf03e1bd296c8493f statx: Add a system call to make enhanced file info available The Linux getattr inode operation is altered to take two additional arguments: a u32 request_mask and an unsigned int flags that indicate the synchronisation mode. This change is propagated to the vfs_getattr*() function. - int (*getattr) (struct vfsmount *, struct dentry *, struct kstat *); + int (*getattr) (const struct path *, struct kstat *, + u32 request_mask, unsigned int sync_mode); The first argument, request_mask, indicates which fields of the statx structure are of interest to the userland call. The second argument, flags, currently may take the values defined in include/uapi/linux/fcntl.h and are optionally used for cache coherence: (1) AT_STATX_SYNC_AS_STAT tells statx() to behave as stat() does. (2) AT_STATX_FORCE_SYNC will require a network filesystem to synchronise its attributes with the server - which might require data writeback to occur to get the timestamps correct. (3) AT_STATX_DONT_SYNC will suppress synchronisation with the server in a network filesystem. The resulting values should be considered approximate. This patch provides a new autoconf test and conditional compilation to cope with the changes in our getattr implementation. Change-Id: Ie4206140ae249c00a8906331c57da359c4a372c4 Reviewed-on: https://gerrit.openafs.org/12572 Reviewed-by: Joe Gorse <jhgorse@gmail.com> Tested-by: Joe Gorse <jhgorse@gmail.com> Tested-by: BuildBot <buildbot@rampaginggeek.com> Reviewed-by: Michael Meffie <mmeffie@sinenomine.net> Reviewed-by: Mark Vitale <mvitale@sinenomine.net> Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
This commit is contained in:
parent
c666bfee88
commit
de5ee1a67d
@ -1173,6 +1173,7 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*)
|
||||
LINUX_REGISTER_SYSCTL_TABLE_NOFLAG
|
||||
LINUX_HAVE_DCACHE_LOCK
|
||||
LINUX_D_COUNT_IS_INT
|
||||
LINUX_IOP_GETATTR_TAKES_PATH_STRUCT
|
||||
LINUX_IOP_MKDIR_TAKES_UMODE_T
|
||||
LINUX_IOP_CREATE_TAKES_UMODE_T
|
||||
LINUX_EXPORT_OP_ENCODE_FH_TAKES_INODES
|
||||
|
@ -1078,15 +1078,27 @@ out:
|
||||
return afs_convert_code(code);
|
||||
}
|
||||
|
||||
#if defined(IOP_GETATTR_TAKES_PATH_STRUCT)
|
||||
static int
|
||||
afs_linux_getattr(const struct path *path, struct kstat *stat, u32 request_mask, unsigned int sync_mode)
|
||||
{
|
||||
int err = afs_linux_revalidate(path->dentry);
|
||||
if (!err) {
|
||||
generic_fillattr(path->dentry->d_inode, stat);
|
||||
}
|
||||
return err;
|
||||
}
|
||||
#else
|
||||
static int
|
||||
afs_linux_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat)
|
||||
{
|
||||
int err = afs_linux_revalidate(dentry);
|
||||
if (!err) {
|
||||
generic_fillattr(dentry->d_inode, stat);
|
||||
}
|
||||
return err;
|
||||
}
|
||||
return err;
|
||||
}
|
||||
#endif
|
||||
|
||||
static afs_uint32
|
||||
parent_vcache_dv(struct inode *inode, cred_t *credp)
|
||||
|
@ -627,6 +627,18 @@ AC_DEFUN([LINUX_DOP_D_DELETE_TAKES_CONST], [
|
||||
[-Werror])
|
||||
])
|
||||
|
||||
AC_DEFUN([LINUX_IOP_GETATTR_TAKES_PATH_STRUCT], [
|
||||
AC_CHECK_LINUX_BUILD([whether 4.11+ inode.i_op->getattr takes a struct path argument],
|
||||
[ac_cv_linux_iop_getattr_takes_path_struct],
|
||||
[#include <linux/fs.h>
|
||||
int _getattr(const struct path *path, struct kstat *stat, u32 request_mask,
|
||||
unsigned int sync_mode) {return 0;};
|
||||
struct inode_operations _i_ops;],
|
||||
[_i_ops.getattr = _getattr;],
|
||||
[IOP_GETATTR_TAKES_PATH_STRUCT],
|
||||
[define if 4.11+ inode.i_op->getattr takes a struct path argument],
|
||||
[-Werror])
|
||||
])
|
||||
|
||||
AC_DEFUN([LINUX_IOP_MKDIR_TAKES_UMODE_T], [
|
||||
AC_CHECK_LINUX_BUILD([whether inode.i_op->mkdir takes a umode_t argument],
|
||||
|
Loading…
Reference in New Issue
Block a user