a3478c0747
In torvalds/linux@a528d35, there are changes to the getattr family of functions, struct kstat, and the interface of inode_operations .getattr. The inode_operations .getattr and simple_getattr() interface changed to: int (*getattr) (const struct path *, struct dentry *, struct kstat *, u32 request_mask, unsigned int query_flags) The request_mask argument indicates which field(s) the caller intends to use. Fields the caller has not specified via request_mask may be set in the returned struct anyway, but their values may be approximate. The query_flags argument indicates whether the filesystem must update the attributes from the backing store. Currently both fields are ignored. It is possible that getattr-related functions within zfs could be optimized based on the request_mask. struct kstat includes new fields: u32 result_mask; /* What fields the user got */ u64 attributes; /* See STATX_ATTR_* flags */ struct timespec btime; /* File creation time */ Fields attribute and btime are cleared; the result_mask reflects this. These appear to be optional based on simple_getattr() and vfs_getattr() within the kernel, which take the same approach. Reviewed-by: Chunwei Chen <david.chen@osnexus.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Olaf Faaland <faaland1@llnl.gov> Closes #5875
68 lines
1.5 KiB
Plaintext
68 lines
1.5 KiB
Plaintext
dnl #
|
|
dnl # Linux 4.11 API
|
|
dnl # See torvalds/linux@a528d35
|
|
dnl #
|
|
AC_DEFUN([ZFS_AC_PATH_KERNEL_IOPS_GETATTR], [
|
|
AC_MSG_CHECKING([whether iops->getattr() takes a path])
|
|
ZFS_LINUX_TRY_COMPILE([
|
|
#include <linux/fs.h>
|
|
|
|
int test_getattr(
|
|
const struct path *p, struct kstat *k,
|
|
u32 request_mask, unsigned int query_flags)
|
|
{ return 0; }
|
|
|
|
static const struct inode_operations
|
|
iops __attribute__ ((unused)) = {
|
|
.getattr = test_getattr,
|
|
};
|
|
],[
|
|
],[
|
|
AC_MSG_RESULT(yes)
|
|
AC_DEFINE(HAVE_PATH_IOPS_GETATTR, 1,
|
|
[iops->getattr() takes a path])
|
|
],[
|
|
AC_MSG_RESULT(no)
|
|
])
|
|
])
|
|
|
|
|
|
|
|
dnl #
|
|
dnl # Linux 3.9 - 4.10 API
|
|
dnl #
|
|
AC_DEFUN([ZFS_AC_VFSMOUNT_KERNEL_IOPS_GETATTR], [
|
|
AC_MSG_CHECKING([whether iops->getattr() takes a vfsmount])
|
|
ZFS_LINUX_TRY_COMPILE([
|
|
#include <linux/fs.h>
|
|
|
|
int test_getattr(
|
|
struct vfsmount *mnt, struct dentry *d,
|
|
struct kstat *k)
|
|
{ return 0; }
|
|
|
|
static const struct inode_operations
|
|
iops __attribute__ ((unused)) = {
|
|
.getattr = test_getattr,
|
|
};
|
|
],[
|
|
],[
|
|
AC_MSG_RESULT(yes)
|
|
AC_DEFINE(HAVE_VFSMOUNT_IOPS_GETATTR, 1,
|
|
[iops->getattr() takes a vfsmount])
|
|
],[
|
|
AC_MSG_RESULT(no)
|
|
])
|
|
])
|
|
|
|
|
|
dnl #
|
|
dnl # The interface of the getattr callback from the inode_operations
|
|
dnl # structure changed. Also, the interface of the simple_getattr()
|
|
dnl # function provided by the kernel changed.
|
|
dnl #
|
|
AC_DEFUN([ZFS_AC_KERNEL_INODE_OPERATIONS_GETATTR], [
|
|
ZFS_AC_PATH_KERNEL_IOPS_GETATTR
|
|
ZFS_AC_VFSMOUNT_KERNEL_IOPS_GETATTR
|
|
])
|