]> granicus.if.org Git - zfs/commit
Linux 4.11 compat: iops.getattr and friends
authorOlaf Faaland <faaland1@llnl.gov>
Tue, 21 Mar 2017 00:51:16 +0000 (17:51 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 21 Mar 2017 00:51:16 +0000 (17:51 -0700)
commita3478c074752610814f894375c3d947ece4938fe
treed6697b5fd25dd47ca92b7579e92b1886ee687797
parentf974e414268448fbb5507e91ed98be7fdf45054b
Linux 4.11 compat: iops.getattr and friends

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
config/kernel-inode-getattr.m4 [new file with mode: 0644]
config/kernel.m4
include/linux/vfs_compat.h
module/zfs/zpl_ctldir.c
module/zfs/zpl_inode.c