nfs_rpc_opsRegular
4.4: Absent ⚠️
4.8: ✅struct nfs_rpc_ops {
u32 version;
const struct dentry_operations *dentry_ops;
const struct inode_operations *dir_inode_ops;
const struct inode_operations *file_inode_ops;
const struct file_operations *file_ops;
int (*getroot)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
struct vfsmount * (*submount)(struct nfs_server *, struct dentry *, struct nfs_fh *, struct nfs_fattr *);
struct dentry * (*try_mount)(int, const char *, struct nfs_mount_info *, struct nfs_subversion *);
int (*getattr)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *);
int (*setattr)(struct dentry *, struct nfs_fattr *, struct iattr *);
int (*lookup)(struct inode *, const struct qstr *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *);
int (*access)(struct inode *, struct nfs_access_entry *);
int (*readlink)(struct inode *, struct page *, unsigned int, unsigned int);
int (*create)(struct inode *, struct dentry *, struct iattr *, int);
int (*remove)(struct inode *, const struct qstr *);
void (*unlink_setup)(struct rpc_message *, struct inode *);
void (*unlink_rpc_prepare)(struct rpc_task *, struct nfs_unlinkdata *);
int (*unlink_done)(struct rpc_task *, struct inode *);
void (*rename_setup)(struct rpc_message *, struct inode *);
void (*rename_rpc_prepare)(struct rpc_task *, struct nfs_renamedata *);
int (*rename_done)(struct rpc_task *, struct inode *, struct inode *);
int (*link)(struct inode *, struct inode *, const struct qstr *);
int (*symlink)(struct inode *, struct dentry *, struct page *, unsigned int, struct iattr *);
int (*mkdir)(struct inode *, struct dentry *, struct iattr *);
int (*rmdir)(struct inode *, const struct qstr *);
int (*readdir)(struct dentry *, struct rpc_cred *, u64, struct page **, unsigned int, int);
int (*mknod)(struct inode *, struct dentry *, struct iattr *, dev_t);
int (*statfs)(struct nfs_server *, struct nfs_fh *, struct nfs_fsstat *);
int (*fsinfo)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
int (*pathconf)(struct nfs_server *, struct nfs_fh *, struct nfs_pathconf *);
int (*set_capabilities)(struct nfs_server *, struct nfs_fh *);
int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, int);
int (*pgio_rpc_prepare)(struct rpc_task *, struct nfs_pgio_header *);
void (*read_setup)(struct nfs_pgio_header *, struct rpc_message *);
int (*read_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*write_setup)(struct nfs_pgio_header *, struct rpc_message *);
int (*write_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*commit_setup)(struct nfs_commit_data *, struct rpc_message *);
void (*commit_rpc_prepare)(struct rpc_task *, struct nfs_commit_data *);
int (*commit_done)(struct rpc_task *, struct nfs_commit_data *);
int (*lock)(struct file *, int, struct file_lock *);
int (*lock_check_bounds)(const struct file_lock *);
void (*clear_acl_cache)(struct inode *);
void (*close_context)(struct nfs_open_context *, int);
struct inode * (*open_context)(struct inode *, struct nfs_open_context *, int, struct iattr *, int *);
int (*have_delegation)(struct inode *, fmode_t);
int (*return_delegation)(struct inode *);
struct nfs_client * (*alloc_client)(const struct nfs_client_initdata *);
struct nfs_client * (*init_client)(struct nfs_client *, const struct nfs_client_initdata *);
void (*free_client)(struct nfs_client *);
struct nfs_server * (*create_server)(struct nfs_mount_info *, struct nfs_subversion *);
struct nfs_server * (*clone_server)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, rpc_authflavor_t);
};
4.10: ✅struct nfs_rpc_ops {
u32 version;
const struct dentry_operations *dentry_ops;
const struct inode_operations *dir_inode_ops;
const struct inode_operations *file_inode_ops;
const struct file_operations *file_ops;
int (*getroot)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
struct vfsmount * (*submount)(struct nfs_server *, struct dentry *, struct nfs_fh *, struct nfs_fattr *);
struct dentry * (*try_mount)(int, const char *, struct nfs_mount_info *, struct nfs_subversion *);
int (*getattr)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *);
int (*setattr)(struct dentry *, struct nfs_fattr *, struct iattr *);
int (*lookup)(struct inode *, const struct qstr *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *);
int (*access)(struct inode *, struct nfs_access_entry *);
int (*readlink)(struct inode *, struct page *, unsigned int, unsigned int);
int (*create)(struct inode *, struct dentry *, struct iattr *, int);
int (*remove)(struct inode *, const struct qstr *);
void (*unlink_setup)(struct rpc_message *, struct inode *);
void (*unlink_rpc_prepare)(struct rpc_task *, struct nfs_unlinkdata *);
int (*unlink_done)(struct rpc_task *, struct inode *);
void (*rename_setup)(struct rpc_message *, struct inode *);
void (*rename_rpc_prepare)(struct rpc_task *, struct nfs_renamedata *);
int (*rename_done)(struct rpc_task *, struct inode *, struct inode *);
int (*link)(struct inode *, struct inode *, const struct qstr *);
int (*symlink)(struct inode *, struct dentry *, struct page *, unsigned int, struct iattr *);
int (*mkdir)(struct inode *, struct dentry *, struct iattr *);
int (*rmdir)(struct inode *, const struct qstr *);
int (*readdir)(struct dentry *, struct rpc_cred *, u64, struct page **, unsigned int, int);
int (*mknod)(struct inode *, struct dentry *, struct iattr *, dev_t);
int (*statfs)(struct nfs_server *, struct nfs_fh *, struct nfs_fsstat *);
int (*fsinfo)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
int (*pathconf)(struct nfs_server *, struct nfs_fh *, struct nfs_pathconf *);
int (*set_capabilities)(struct nfs_server *, struct nfs_fh *);
int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, int);
int (*pgio_rpc_prepare)(struct rpc_task *, struct nfs_pgio_header *);
void (*read_setup)(struct nfs_pgio_header *, struct rpc_message *);
int (*read_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*write_setup)(struct nfs_pgio_header *, struct rpc_message *);
int (*write_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*commit_setup)(struct nfs_commit_data *, struct rpc_message *);
void (*commit_rpc_prepare)(struct rpc_task *, struct nfs_commit_data *);
int (*commit_done)(struct rpc_task *, struct nfs_commit_data *);
int (*lock)(struct file *, int, struct file_lock *);
int (*lock_check_bounds)(const struct file_lock *);
void (*clear_acl_cache)(struct inode *);
void (*close_context)(struct nfs_open_context *, int);
struct inode * (*open_context)(struct inode *, struct nfs_open_context *, int, struct iattr *, int *);
int (*have_delegation)(struct inode *, fmode_t);
int (*return_delegation)(struct inode *);
struct nfs_client * (*alloc_client)(const struct nfs_client_initdata *);
struct nfs_client * (*init_client)(struct nfs_client *, const struct nfs_client_initdata *);
void (*free_client)(struct nfs_client *);
struct nfs_server * (*create_server)(struct nfs_mount_info *, struct nfs_subversion *);
struct nfs_server * (*clone_server)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, rpc_authflavor_t);
};
4.13: ✅struct nfs_rpc_ops {
u32 version;
const struct dentry_operations *dentry_ops;
const struct inode_operations *dir_inode_ops;
const struct inode_operations *file_inode_ops;
const struct file_operations *file_ops;
const struct nlmclnt_operations *nlmclnt_ops;
int (*getroot)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
struct vfsmount * (*submount)(struct nfs_server *, struct dentry *, struct nfs_fh *, struct nfs_fattr *);
struct dentry * (*try_mount)(int, const char *, struct nfs_mount_info *, struct nfs_subversion *);
int (*getattr)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *);
int (*setattr)(struct dentry *, struct nfs_fattr *, struct iattr *);
int (*lookup)(struct inode *, const struct qstr *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *);
int (*lookupp)(struct inode *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *);
int (*access)(struct inode *, struct nfs_access_entry *);
int (*readlink)(struct inode *, struct page *, unsigned int, unsigned int);
int (*create)(struct inode *, struct dentry *, struct iattr *, int);
int (*remove)(struct inode *, const struct qstr *);
void (*unlink_setup)(struct rpc_message *, struct inode *);
void (*unlink_rpc_prepare)(struct rpc_task *, struct nfs_unlinkdata *);
int (*unlink_done)(struct rpc_task *, struct inode *);
void (*rename_setup)(struct rpc_message *, struct inode *);
void (*rename_rpc_prepare)(struct rpc_task *, struct nfs_renamedata *);
int (*rename_done)(struct rpc_task *, struct inode *, struct inode *);
int (*link)(struct inode *, struct inode *, const struct qstr *);
int (*symlink)(struct inode *, struct dentry *, struct page *, unsigned int, struct iattr *);
int (*mkdir)(struct inode *, struct dentry *, struct iattr *);
int (*rmdir)(struct inode *, const struct qstr *);
int (*readdir)(struct dentry *, struct rpc_cred *, u64, struct page **, unsigned int, bool);
int (*mknod)(struct inode *, struct dentry *, struct iattr *, dev_t);
int (*statfs)(struct nfs_server *, struct nfs_fh *, struct nfs_fsstat *);
int (*fsinfo)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
int (*pathconf)(struct nfs_server *, struct nfs_fh *, struct nfs_pathconf *);
int (*set_capabilities)(struct nfs_server *, struct nfs_fh *);
int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, bool);
int (*pgio_rpc_prepare)(struct rpc_task *, struct nfs_pgio_header *);
void (*read_setup)(struct nfs_pgio_header *, struct rpc_message *);
int (*read_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*write_setup)(struct nfs_pgio_header *, struct rpc_message *);
int (*write_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*commit_setup)(struct nfs_commit_data *, struct rpc_message *);
void (*commit_rpc_prepare)(struct rpc_task *, struct nfs_commit_data *);
int (*commit_done)(struct rpc_task *, struct nfs_commit_data *);
int (*lock)(struct file *, int, struct file_lock *);
int (*lock_check_bounds)(const struct file_lock *);
void (*clear_acl_cache)(struct inode *);
void (*close_context)(struct nfs_open_context *, int);
struct inode * (*open_context)(struct inode *, struct nfs_open_context *, int, struct iattr *, int *);
int (*have_delegation)(struct inode *, fmode_t);
int (*return_delegation)(struct inode *);
struct nfs_client * (*alloc_client)(const struct nfs_client_initdata *);
struct nfs_client * (*init_client)(struct nfs_client *, const struct nfs_client_initdata *);
void (*free_client)(struct nfs_client *);
struct nfs_server * (*create_server)(struct nfs_mount_info *, struct nfs_subversion *);
struct nfs_server * (*clone_server)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, rpc_authflavor_t);
};
4.15: ✅struct nfs_rpc_ops {
u32 version;
const struct dentry_operations *dentry_ops;
const struct inode_operations *dir_inode_ops;
const struct inode_operations *file_inode_ops;
const struct file_operations *file_ops;
const struct nlmclnt_operations *nlmclnt_ops;
int (*getroot)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
struct vfsmount * (*submount)(struct nfs_server *, struct dentry *, struct nfs_fh *, struct nfs_fattr *);
struct dentry * (*try_mount)(int, const char *, struct nfs_mount_info *, struct nfs_subversion *);
int (*getattr)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *);
int (*setattr)(struct dentry *, struct nfs_fattr *, struct iattr *);
int (*lookup)(struct inode *, const struct qstr *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *);
int (*lookupp)(struct inode *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *);
int (*access)(struct inode *, struct nfs_access_entry *);
int (*readlink)(struct inode *, struct page *, unsigned int, unsigned int);
int (*create)(struct inode *, struct dentry *, struct iattr *, int);
int (*remove)(struct inode *, const struct qstr *);
void (*unlink_setup)(struct rpc_message *, struct inode *);
void (*unlink_rpc_prepare)(struct rpc_task *, struct nfs_unlinkdata *);
int (*unlink_done)(struct rpc_task *, struct inode *);
void (*rename_setup)(struct rpc_message *, struct inode *);
void (*rename_rpc_prepare)(struct rpc_task *, struct nfs_renamedata *);
int (*rename_done)(struct rpc_task *, struct inode *, struct inode *);
int (*link)(struct inode *, struct inode *, const struct qstr *);
int (*symlink)(struct inode *, struct dentry *, struct page *, unsigned int, struct iattr *);
int (*mkdir)(struct inode *, struct dentry *, struct iattr *);
int (*rmdir)(struct inode *, const struct qstr *);
int (*readdir)(struct dentry *, struct rpc_cred *, u64, struct page **, unsigned int, bool);
int (*mknod)(struct inode *, struct dentry *, struct iattr *, dev_t);
int (*statfs)(struct nfs_server *, struct nfs_fh *, struct nfs_fsstat *);
int (*fsinfo)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
int (*pathconf)(struct nfs_server *, struct nfs_fh *, struct nfs_pathconf *);
int (*set_capabilities)(struct nfs_server *, struct nfs_fh *);
int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, bool);
int (*pgio_rpc_prepare)(struct rpc_task *, struct nfs_pgio_header *);
void (*read_setup)(struct nfs_pgio_header *, struct rpc_message *);
int (*read_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*write_setup)(struct nfs_pgio_header *, struct rpc_message *);
int (*write_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*commit_setup)(struct nfs_commit_data *, struct rpc_message *);
void (*commit_rpc_prepare)(struct rpc_task *, struct nfs_commit_data *);
int (*commit_done)(struct rpc_task *, struct nfs_commit_data *);
int (*lock)(struct file *, int, struct file_lock *);
int (*lock_check_bounds)(const struct file_lock *);
void (*clear_acl_cache)(struct inode *);
void (*close_context)(struct nfs_open_context *, int);
struct inode * (*open_context)(struct inode *, struct nfs_open_context *, int, struct iattr *, int *);
int (*have_delegation)(struct inode *, fmode_t);
int (*return_delegation)(struct inode *);
struct nfs_client * (*alloc_client)(const struct nfs_client_initdata *);
struct nfs_client * (*init_client)(struct nfs_client *, const struct nfs_client_initdata *);
void (*free_client)(struct nfs_client *);
struct nfs_server * (*create_server)(struct nfs_mount_info *, struct nfs_subversion *);
struct nfs_server * (*clone_server)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, rpc_authflavor_t);
};
4.18: ✅struct nfs_rpc_ops {
u32 version;
const struct dentry_operations *dentry_ops;
const struct inode_operations *dir_inode_ops;
const struct inode_operations *file_inode_ops;
const struct file_operations *file_ops;
const struct nlmclnt_operations *nlmclnt_ops;
int (*getroot)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
struct vfsmount * (*submount)(struct nfs_server *, struct dentry *, struct nfs_fh *, struct nfs_fattr *);
struct dentry * (*try_mount)(int, const char *, struct nfs_mount_info *, struct nfs_subversion *);
int (*getattr)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *, struct inode *);
int (*setattr)(struct dentry *, struct nfs_fattr *, struct iattr *);
int (*lookup)(struct inode *, const struct qstr *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *);
int (*lookupp)(struct inode *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *);
int (*access)(struct inode *, struct nfs_access_entry *);
int (*readlink)(struct inode *, struct page *, unsigned int, unsigned int);
int (*create)(struct inode *, struct dentry *, struct iattr *, int);
int (*remove)(struct inode *, struct dentry *);
void (*unlink_setup)(struct rpc_message *, struct dentry *, struct inode *);
void (*unlink_rpc_prepare)(struct rpc_task *, struct nfs_unlinkdata *);
int (*unlink_done)(struct rpc_task *, struct inode *);
void (*rename_setup)(struct rpc_message *, struct dentry *, struct dentry *);
void (*rename_rpc_prepare)(struct rpc_task *, struct nfs_renamedata *);
int (*rename_done)(struct rpc_task *, struct inode *, struct inode *);
int (*link)(struct inode *, struct inode *, const struct qstr *);
int (*symlink)(struct inode *, struct dentry *, struct page *, unsigned int, struct iattr *);
int (*mkdir)(struct inode *, struct dentry *, struct iattr *);
int (*rmdir)(struct inode *, const struct qstr *);
int (*readdir)(struct dentry *, struct rpc_cred *, u64, struct page **, unsigned int, bool);
int (*mknod)(struct inode *, struct dentry *, struct iattr *, dev_t);
int (*statfs)(struct nfs_server *, struct nfs_fh *, struct nfs_fsstat *);
int (*fsinfo)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
int (*pathconf)(struct nfs_server *, struct nfs_fh *, struct nfs_pathconf *);
int (*set_capabilities)(struct nfs_server *, struct nfs_fh *);
int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, bool);
int (*pgio_rpc_prepare)(struct rpc_task *, struct nfs_pgio_header *);
void (*read_setup)(struct nfs_pgio_header *, struct rpc_message *);
int (*read_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*write_setup)(struct nfs_pgio_header *, struct rpc_message *, struct rpc_clnt **);
int (*write_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*commit_setup)(struct nfs_commit_data *, struct rpc_message *, struct rpc_clnt **);
void (*commit_rpc_prepare)(struct rpc_task *, struct nfs_commit_data *);
int (*commit_done)(struct rpc_task *, struct nfs_commit_data *);
int (*lock)(struct file *, int, struct file_lock *);
int (*lock_check_bounds)(const struct file_lock *);
void (*clear_acl_cache)(struct inode *);
void (*close_context)(struct nfs_open_context *, int);
struct inode * (*open_context)(struct inode *, struct nfs_open_context *, int, struct iattr *, int *);
int (*have_delegation)(struct inode *, fmode_t);
struct nfs_client * (*alloc_client)(const struct nfs_client_initdata *);
struct nfs_client * (*init_client)(struct nfs_client *, const struct nfs_client_initdata *);
void (*free_client)(struct nfs_client *);
struct nfs_server * (*create_server)(struct nfs_mount_info *, struct nfs_subversion *);
struct nfs_server * (*clone_server)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, rpc_authflavor_t);
};
5.0: ✅struct nfs_rpc_ops {
u32 version;
const struct dentry_operations *dentry_ops;
const struct inode_operations *dir_inode_ops;
const struct inode_operations *file_inode_ops;
const struct file_operations *file_ops;
const struct nlmclnt_operations *nlmclnt_ops;
int (*getroot)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
struct vfsmount * (*submount)(struct nfs_server *, struct dentry *, struct nfs_fh *, struct nfs_fattr *);
struct dentry * (*try_mount)(int, const char *, struct nfs_mount_info *, struct nfs_subversion *);
int (*getattr)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *, struct inode *);
int (*setattr)(struct dentry *, struct nfs_fattr *, struct iattr *);
int (*lookup)(struct inode *, const struct qstr *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *);
int (*lookupp)(struct inode *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *);
int (*access)(struct inode *, struct nfs_access_entry *);
int (*readlink)(struct inode *, struct page *, unsigned int, unsigned int);
int (*create)(struct inode *, struct dentry *, struct iattr *, int);
int (*remove)(struct inode *, struct dentry *);
void (*unlink_setup)(struct rpc_message *, struct dentry *, struct inode *);
void (*unlink_rpc_prepare)(struct rpc_task *, struct nfs_unlinkdata *);
int (*unlink_done)(struct rpc_task *, struct inode *);
void (*rename_setup)(struct rpc_message *, struct dentry *, struct dentry *);
void (*rename_rpc_prepare)(struct rpc_task *, struct nfs_renamedata *);
int (*rename_done)(struct rpc_task *, struct inode *, struct inode *);
int (*link)(struct inode *, struct inode *, const struct qstr *);
int (*symlink)(struct inode *, struct dentry *, struct page *, unsigned int, struct iattr *);
int (*mkdir)(struct inode *, struct dentry *, struct iattr *);
int (*rmdir)(struct inode *, const struct qstr *);
int (*readdir)(struct dentry *, const struct cred *, u64, struct page **, unsigned int, bool);
int (*mknod)(struct inode *, struct dentry *, struct iattr *, dev_t);
int (*statfs)(struct nfs_server *, struct nfs_fh *, struct nfs_fsstat *);
int (*fsinfo)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
int (*pathconf)(struct nfs_server *, struct nfs_fh *, struct nfs_pathconf *);
int (*set_capabilities)(struct nfs_server *, struct nfs_fh *);
int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, bool);
int (*pgio_rpc_prepare)(struct rpc_task *, struct nfs_pgio_header *);
void (*read_setup)(struct nfs_pgio_header *, struct rpc_message *);
int (*read_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*write_setup)(struct nfs_pgio_header *, struct rpc_message *, struct rpc_clnt **);
int (*write_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*commit_setup)(struct nfs_commit_data *, struct rpc_message *, struct rpc_clnt **);
void (*commit_rpc_prepare)(struct rpc_task *, struct nfs_commit_data *);
int (*commit_done)(struct rpc_task *, struct nfs_commit_data *);
int (*lock)(struct file *, int, struct file_lock *);
int (*lock_check_bounds)(const struct file_lock *);
void (*clear_acl_cache)(struct inode *);
void (*close_context)(struct nfs_open_context *, int);
struct inode * (*open_context)(struct inode *, struct nfs_open_context *, int, struct iattr *, int *);
int (*have_delegation)(struct inode *, fmode_t);
struct nfs_client * (*alloc_client)(const struct nfs_client_initdata *);
struct nfs_client * (*init_client)(struct nfs_client *, const struct nfs_client_initdata *);
void (*free_client)(struct nfs_client *);
struct nfs_server * (*create_server)(struct nfs_mount_info *, struct nfs_subversion *);
struct nfs_server * (*clone_server)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, rpc_authflavor_t);
};
5.3: ✅struct nfs_rpc_ops {
u32 version;
const struct dentry_operations *dentry_ops;
const struct inode_operations *dir_inode_ops;
const struct inode_operations *file_inode_ops;
const struct file_operations *file_ops;
const struct nlmclnt_operations *nlmclnt_ops;
int (*getroot)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
struct vfsmount * (*submount)(struct nfs_server *, struct dentry *, struct nfs_fh *, struct nfs_fattr *);
struct dentry * (*try_mount)(int, const char *, struct nfs_mount_info *, struct nfs_subversion *);
int (*getattr)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *, struct inode *);
int (*setattr)(struct dentry *, struct nfs_fattr *, struct iattr *);
int (*lookup)(struct inode *, const struct qstr *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *);
int (*lookupp)(struct inode *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *);
int (*access)(struct inode *, struct nfs_access_entry *);
int (*readlink)(struct inode *, struct page *, unsigned int, unsigned int);
int (*create)(struct inode *, struct dentry *, struct iattr *, int);
int (*remove)(struct inode *, struct dentry *);
void (*unlink_setup)(struct rpc_message *, struct dentry *, struct inode *);
void (*unlink_rpc_prepare)(struct rpc_task *, struct nfs_unlinkdata *);
int (*unlink_done)(struct rpc_task *, struct inode *);
void (*rename_setup)(struct rpc_message *, struct dentry *, struct dentry *);
void (*rename_rpc_prepare)(struct rpc_task *, struct nfs_renamedata *);
int (*rename_done)(struct rpc_task *, struct inode *, struct inode *);
int (*link)(struct inode *, struct inode *, const struct qstr *);
int (*symlink)(struct inode *, struct dentry *, struct page *, unsigned int, struct iattr *);
int (*mkdir)(struct inode *, struct dentry *, struct iattr *);
int (*rmdir)(struct inode *, const struct qstr *);
int (*readdir)(struct dentry *, const struct cred *, u64, struct page **, unsigned int, bool);
int (*mknod)(struct inode *, struct dentry *, struct iattr *, dev_t);
int (*statfs)(struct nfs_server *, struct nfs_fh *, struct nfs_fsstat *);
int (*fsinfo)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
int (*pathconf)(struct nfs_server *, struct nfs_fh *, struct nfs_pathconf *);
int (*set_capabilities)(struct nfs_server *, struct nfs_fh *);
int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, bool);
int (*pgio_rpc_prepare)(struct rpc_task *, struct nfs_pgio_header *);
void (*read_setup)(struct nfs_pgio_header *, struct rpc_message *);
int (*read_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*write_setup)(struct nfs_pgio_header *, struct rpc_message *, struct rpc_clnt **);
int (*write_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*commit_setup)(struct nfs_commit_data *, struct rpc_message *, struct rpc_clnt **);
void (*commit_rpc_prepare)(struct rpc_task *, struct nfs_commit_data *);
int (*commit_done)(struct rpc_task *, struct nfs_commit_data *);
int (*lock)(struct file *, int, struct file_lock *);
int (*lock_check_bounds)(const struct file_lock *);
void (*clear_acl_cache)(struct inode *);
void (*close_context)(struct nfs_open_context *, int);
struct inode * (*open_context)(struct inode *, struct nfs_open_context *, int, struct iattr *, int *);
int (*have_delegation)(struct inode *, fmode_t);
struct nfs_client * (*alloc_client)(const struct nfs_client_initdata *);
struct nfs_client * (*init_client)(struct nfs_client *, const struct nfs_client_initdata *);
void (*free_client)(struct nfs_client *);
struct nfs_server * (*create_server)(struct nfs_mount_info *, struct nfs_subversion *);
struct nfs_server * (*clone_server)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, rpc_authflavor_t);
};
5.4: ✅struct nfs_rpc_ops {
u32 version;
const struct dentry_operations *dentry_ops;
const struct inode_operations *dir_inode_ops;
const struct inode_operations *file_inode_ops;
const struct file_operations *file_ops;
const struct nlmclnt_operations *nlmclnt_ops;
int (*getroot)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
struct vfsmount * (*submount)(struct nfs_server *, struct dentry *, struct nfs_fh *, struct nfs_fattr *);
struct dentry * (*try_mount)(int, const char *, struct nfs_mount_info *, struct nfs_subversion *);
int (*getattr)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *, struct inode *);
int (*setattr)(struct dentry *, struct nfs_fattr *, struct iattr *);
int (*lookup)(struct inode *, const struct qstr *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *);
int (*lookupp)(struct inode *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *);
int (*access)(struct inode *, struct nfs_access_entry *);
int (*readlink)(struct inode *, struct page *, unsigned int, unsigned int);
int (*create)(struct inode *, struct dentry *, struct iattr *, int);
int (*remove)(struct inode *, struct dentry *);
void (*unlink_setup)(struct rpc_message *, struct dentry *, struct inode *);
void (*unlink_rpc_prepare)(struct rpc_task *, struct nfs_unlinkdata *);
int (*unlink_done)(struct rpc_task *, struct inode *);
void (*rename_setup)(struct rpc_message *, struct dentry *, struct dentry *);
void (*rename_rpc_prepare)(struct rpc_task *, struct nfs_renamedata *);
int (*rename_done)(struct rpc_task *, struct inode *, struct inode *);
int (*link)(struct inode *, struct inode *, const struct qstr *);
int (*symlink)(struct inode *, struct dentry *, struct page *, unsigned int, struct iattr *);
int (*mkdir)(struct inode *, struct dentry *, struct iattr *);
int (*rmdir)(struct inode *, const struct qstr *);
int (*readdir)(struct dentry *, const struct cred *, u64, struct page **, unsigned int, bool);
int (*mknod)(struct inode *, struct dentry *, struct iattr *, dev_t);
int (*statfs)(struct nfs_server *, struct nfs_fh *, struct nfs_fsstat *);
int (*fsinfo)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
int (*pathconf)(struct nfs_server *, struct nfs_fh *, struct nfs_pathconf *);
int (*set_capabilities)(struct nfs_server *, struct nfs_fh *);
int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, bool);
int (*pgio_rpc_prepare)(struct rpc_task *, struct nfs_pgio_header *);
void (*read_setup)(struct nfs_pgio_header *, struct rpc_message *);
int (*read_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*write_setup)(struct nfs_pgio_header *, struct rpc_message *, struct rpc_clnt **);
int (*write_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*commit_setup)(struct nfs_commit_data *, struct rpc_message *, struct rpc_clnt **);
void (*commit_rpc_prepare)(struct rpc_task *, struct nfs_commit_data *);
int (*commit_done)(struct rpc_task *, struct nfs_commit_data *);
int (*lock)(struct file *, int, struct file_lock *);
int (*lock_check_bounds)(const struct file_lock *);
void (*clear_acl_cache)(struct inode *);
void (*close_context)(struct nfs_open_context *, int);
struct inode * (*open_context)(struct inode *, struct nfs_open_context *, int, struct iattr *, int *);
int (*have_delegation)(struct inode *, fmode_t);
struct nfs_client * (*alloc_client)(const struct nfs_client_initdata *);
struct nfs_client * (*init_client)(struct nfs_client *, const struct nfs_client_initdata *);
void (*free_client)(struct nfs_client *);
struct nfs_server * (*create_server)(struct nfs_mount_info *, struct nfs_subversion *);
struct nfs_server * (*clone_server)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, rpc_authflavor_t);
};
5.8: Absent ⚠️
5.11: Absent ⚠️
5.13: ✅struct nfs_rpc_ops {
u32 version;
const struct dentry_operations *dentry_ops;
const struct inode_operations *dir_inode_ops;
const struct inode_operations *file_inode_ops;
const struct file_operations *file_ops;
const struct nlmclnt_operations *nlmclnt_ops;
int (*getroot)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
int (*submount)(struct fs_context *, struct nfs_server *);
int (*try_get_tree)(struct fs_context *);
int (*getattr)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *, struct inode *);
int (*setattr)(struct dentry *, struct nfs_fattr *, struct iattr *);
int (*lookup)(struct inode *, struct dentry *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *);
int (*lookupp)(struct inode *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *);
int (*access)(struct inode *, struct nfs_access_entry *);
int (*readlink)(struct inode *, struct page *, unsigned int, unsigned int);
int (*create)(struct inode *, struct dentry *, struct iattr *, int);
int (*remove)(struct inode *, struct dentry *);
void (*unlink_setup)(struct rpc_message *, struct dentry *, struct inode *);
void (*unlink_rpc_prepare)(struct rpc_task *, struct nfs_unlinkdata *);
int (*unlink_done)(struct rpc_task *, struct inode *);
void (*rename_setup)(struct rpc_message *, struct dentry *, struct dentry *);
void (*rename_rpc_prepare)(struct rpc_task *, struct nfs_renamedata *);
int (*rename_done)(struct rpc_task *, struct inode *, struct inode *);
int (*link)(struct inode *, struct inode *, const struct qstr *);
int (*symlink)(struct inode *, struct dentry *, struct page *, unsigned int, struct iattr *);
int (*mkdir)(struct inode *, struct dentry *, struct iattr *);
int (*rmdir)(struct inode *, const struct qstr *);
int (*readdir)(struct nfs_readdir_arg *, struct nfs_readdir_res *);
int (*mknod)(struct inode *, struct dentry *, struct iattr *, dev_t);
int (*statfs)(struct nfs_server *, struct nfs_fh *, struct nfs_fsstat *);
int (*fsinfo)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
int (*pathconf)(struct nfs_server *, struct nfs_fh *, struct nfs_pathconf *);
int (*set_capabilities)(struct nfs_server *, struct nfs_fh *);
int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, bool);
int (*pgio_rpc_prepare)(struct rpc_task *, struct nfs_pgio_header *);
void (*read_setup)(struct nfs_pgio_header *, struct rpc_message *);
int (*read_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*write_setup)(struct nfs_pgio_header *, struct rpc_message *, struct rpc_clnt **);
int (*write_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*commit_setup)(struct nfs_commit_data *, struct rpc_message *, struct rpc_clnt **);
void (*commit_rpc_prepare)(struct rpc_task *, struct nfs_commit_data *);
int (*commit_done)(struct rpc_task *, struct nfs_commit_data *);
int (*lock)(struct file *, int, struct file_lock *);
int (*lock_check_bounds)(const struct file_lock *);
void (*clear_acl_cache)(struct inode *);
void (*close_context)(struct nfs_open_context *, int);
struct inode * (*open_context)(struct inode *, struct nfs_open_context *, int, struct iattr *, int *);
int (*have_delegation)(struct inode *, fmode_t);
struct nfs_client * (*alloc_client)(const struct nfs_client_initdata *);
struct nfs_client * (*init_client)(struct nfs_client *, const struct nfs_client_initdata *);
void (*free_client)(struct nfs_client *);
struct nfs_server * (*create_server)(struct fs_context *);
struct nfs_server * (*clone_server)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, rpc_authflavor_t);
};
5.15: ✅struct nfs_rpc_ops {
u32 version;
const struct dentry_operations *dentry_ops;
const struct inode_operations *dir_inode_ops;
const struct inode_operations *file_inode_ops;
const struct file_operations *file_ops;
const struct nlmclnt_operations *nlmclnt_ops;
int (*getroot)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
int (*submount)(struct fs_context *, struct nfs_server *);
int (*try_get_tree)(struct fs_context *);
int (*getattr)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *, struct inode *);
int (*setattr)(struct dentry *, struct nfs_fattr *, struct iattr *);
int (*lookup)(struct inode *, struct dentry *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *);
int (*lookupp)(struct inode *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *);
int (*access)(struct inode *, struct nfs_access_entry *);
int (*readlink)(struct inode *, struct page *, unsigned int, unsigned int);
int (*create)(struct inode *, struct dentry *, struct iattr *, int);
int (*remove)(struct inode *, struct dentry *);
void (*unlink_setup)(struct rpc_message *, struct dentry *, struct inode *);
void (*unlink_rpc_prepare)(struct rpc_task *, struct nfs_unlinkdata *);
int (*unlink_done)(struct rpc_task *, struct inode *);
void (*rename_setup)(struct rpc_message *, struct dentry *, struct dentry *);
void (*rename_rpc_prepare)(struct rpc_task *, struct nfs_renamedata *);
int (*rename_done)(struct rpc_task *, struct inode *, struct inode *);
int (*link)(struct inode *, struct inode *, const struct qstr *);
int (*symlink)(struct inode *, struct dentry *, struct page *, unsigned int, struct iattr *);
int (*mkdir)(struct inode *, struct dentry *, struct iattr *);
int (*rmdir)(struct inode *, const struct qstr *);
int (*readdir)(struct nfs_readdir_arg *, struct nfs_readdir_res *);
int (*mknod)(struct inode *, struct dentry *, struct iattr *, dev_t);
int (*statfs)(struct nfs_server *, struct nfs_fh *, struct nfs_fsstat *);
int (*fsinfo)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
int (*pathconf)(struct nfs_server *, struct nfs_fh *, struct nfs_pathconf *);
int (*set_capabilities)(struct nfs_server *, struct nfs_fh *);
int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, bool);
int (*pgio_rpc_prepare)(struct rpc_task *, struct nfs_pgio_header *);
void (*read_setup)(struct nfs_pgio_header *, struct rpc_message *);
int (*read_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*write_setup)(struct nfs_pgio_header *, struct rpc_message *, struct rpc_clnt **);
int (*write_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*commit_setup)(struct nfs_commit_data *, struct rpc_message *, struct rpc_clnt **);
void (*commit_rpc_prepare)(struct rpc_task *, struct nfs_commit_data *);
int (*commit_done)(struct rpc_task *, struct nfs_commit_data *);
int (*lock)(struct file *, int, struct file_lock *);
int (*lock_check_bounds)(const struct file_lock *);
void (*clear_acl_cache)(struct inode *);
void (*close_context)(struct nfs_open_context *, int);
struct inode * (*open_context)(struct inode *, struct nfs_open_context *, int, struct iattr *, int *);
int (*have_delegation)(struct inode *, fmode_t);
struct nfs_client * (*alloc_client)(const struct nfs_client_initdata *);
struct nfs_client * (*init_client)(struct nfs_client *, const struct nfs_client_initdata *);
void (*free_client)(struct nfs_client *);
struct nfs_server * (*create_server)(struct fs_context *);
struct nfs_server * (*clone_server)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, rpc_authflavor_t);
int (*discover_trunking)(struct nfs_server *, struct nfs_fh *);
};
5.19: ✅struct nfs_rpc_ops {
u32 version;
const struct dentry_operations *dentry_ops;
const struct inode_operations *dir_inode_ops;
const struct inode_operations *file_inode_ops;
const struct file_operations *file_ops;
const struct nlmclnt_operations *nlmclnt_ops;
int (*getroot)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
int (*submount)(struct fs_context *, struct nfs_server *);
int (*try_get_tree)(struct fs_context *);
int (*getattr)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, struct inode *);
int (*setattr)(struct dentry *, struct nfs_fattr *, struct iattr *);
int (*lookup)(struct inode *, struct dentry *, struct nfs_fh *, struct nfs_fattr *);
int (*lookupp)(struct inode *, struct nfs_fh *, struct nfs_fattr *);
int (*access)(struct inode *, struct nfs_access_entry *, const struct cred *);
int (*readlink)(struct inode *, struct page *, unsigned int, unsigned int);
int (*create)(struct inode *, struct dentry *, struct iattr *, int);
int (*remove)(struct inode *, struct dentry *);
void (*unlink_setup)(struct rpc_message *, struct dentry *, struct inode *);
void (*unlink_rpc_prepare)(struct rpc_task *, struct nfs_unlinkdata *);
int (*unlink_done)(struct rpc_task *, struct inode *);
void (*rename_setup)(struct rpc_message *, struct dentry *, struct dentry *);
void (*rename_rpc_prepare)(struct rpc_task *, struct nfs_renamedata *);
int (*rename_done)(struct rpc_task *, struct inode *, struct inode *);
int (*link)(struct inode *, struct inode *, const struct qstr *);
int (*symlink)(struct inode *, struct dentry *, struct page *, unsigned int, struct iattr *);
int (*mkdir)(struct inode *, struct dentry *, struct iattr *);
int (*rmdir)(struct inode *, const struct qstr *);
int (*readdir)(struct nfs_readdir_arg *, struct nfs_readdir_res *);
int (*mknod)(struct inode *, struct dentry *, struct iattr *, dev_t);
int (*statfs)(struct nfs_server *, struct nfs_fh *, struct nfs_fsstat *);
int (*fsinfo)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
int (*pathconf)(struct nfs_server *, struct nfs_fh *, struct nfs_pathconf *);
int (*set_capabilities)(struct nfs_server *, struct nfs_fh *);
int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, bool);
int (*pgio_rpc_prepare)(struct rpc_task *, struct nfs_pgio_header *);
void (*read_setup)(struct nfs_pgio_header *, struct rpc_message *);
int (*read_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*write_setup)(struct nfs_pgio_header *, struct rpc_message *, struct rpc_clnt **);
int (*write_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*commit_setup)(struct nfs_commit_data *, struct rpc_message *, struct rpc_clnt **);
void (*commit_rpc_prepare)(struct rpc_task *, struct nfs_commit_data *);
int (*commit_done)(struct rpc_task *, struct nfs_commit_data *);
int (*lock)(struct file *, int, struct file_lock *);
int (*lock_check_bounds)(const struct file_lock *);
void (*clear_acl_cache)(struct inode *);
void (*close_context)(struct nfs_open_context *, int);
struct inode * (*open_context)(struct inode *, struct nfs_open_context *, int, struct iattr *, int *);
int (*have_delegation)(struct inode *, fmode_t);
struct nfs_client * (*alloc_client)(const struct nfs_client_initdata *);
struct nfs_client * (*init_client)(struct nfs_client *, const struct nfs_client_initdata *);
void (*free_client)(struct nfs_client *);
struct nfs_server * (*create_server)(struct fs_context *);
struct nfs_server * (*clone_server)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, rpc_authflavor_t);
int (*discover_trunking)(struct nfs_server *, struct nfs_fh *);
void (*enable_swap)(struct inode *);
void (*disable_swap)(struct inode *);
};
6.2: ✅struct nfs_rpc_ops {
u32 version;
const struct dentry_operations *dentry_ops;
const struct inode_operations *dir_inode_ops;
const struct inode_operations *file_inode_ops;
const struct file_operations *file_ops;
const struct nlmclnt_operations *nlmclnt_ops;
int (*getroot)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
int (*submount)(struct fs_context *, struct nfs_server *);
int (*try_get_tree)(struct fs_context *);
int (*getattr)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, struct inode *);
int (*setattr)(struct dentry *, struct nfs_fattr *, struct iattr *);
int (*lookup)(struct inode *, struct dentry *, struct nfs_fh *, struct nfs_fattr *);
int (*lookupp)(struct inode *, struct nfs_fh *, struct nfs_fattr *);
int (*access)(struct inode *, struct nfs_access_entry *, const struct cred *);
int (*readlink)(struct inode *, struct page *, unsigned int, unsigned int);
int (*create)(struct inode *, struct dentry *, struct iattr *, int);
int (*remove)(struct inode *, struct dentry *);
void (*unlink_setup)(struct rpc_message *, struct dentry *, struct inode *);
void (*unlink_rpc_prepare)(struct rpc_task *, struct nfs_unlinkdata *);
int (*unlink_done)(struct rpc_task *, struct inode *);
void (*rename_setup)(struct rpc_message *, struct dentry *, struct dentry *);
void (*rename_rpc_prepare)(struct rpc_task *, struct nfs_renamedata *);
int (*rename_done)(struct rpc_task *, struct inode *, struct inode *);
int (*link)(struct inode *, struct inode *, const struct qstr *);
int (*symlink)(struct inode *, struct dentry *, struct page *, unsigned int, struct iattr *);
int (*mkdir)(struct inode *, struct dentry *, struct iattr *);
int (*rmdir)(struct inode *, const struct qstr *);
int (*readdir)(struct nfs_readdir_arg *, struct nfs_readdir_res *);
int (*mknod)(struct inode *, struct dentry *, struct iattr *, dev_t);
int (*statfs)(struct nfs_server *, struct nfs_fh *, struct nfs_fsstat *);
int (*fsinfo)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
int (*pathconf)(struct nfs_server *, struct nfs_fh *, struct nfs_pathconf *);
int (*set_capabilities)(struct nfs_server *, struct nfs_fh *);
int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, bool);
int (*pgio_rpc_prepare)(struct rpc_task *, struct nfs_pgio_header *);
void (*read_setup)(struct nfs_pgio_header *, struct rpc_message *);
int (*read_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*write_setup)(struct nfs_pgio_header *, struct rpc_message *, struct rpc_clnt **);
int (*write_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*commit_setup)(struct nfs_commit_data *, struct rpc_message *, struct rpc_clnt **);
void (*commit_rpc_prepare)(struct rpc_task *, struct nfs_commit_data *);
int (*commit_done)(struct rpc_task *, struct nfs_commit_data *);
int (*lock)(struct file *, int, struct file_lock *);
int (*lock_check_bounds)(const struct file_lock *);
void (*clear_acl_cache)(struct inode *);
void (*close_context)(struct nfs_open_context *, int);
struct inode * (*open_context)(struct inode *, struct nfs_open_context *, int, struct iattr *, int *);
int (*have_delegation)(struct inode *, fmode_t);
struct nfs_client * (*alloc_client)(const struct nfs_client_initdata *);
struct nfs_client * (*init_client)(struct nfs_client *, const struct nfs_client_initdata *);
void (*free_client)(struct nfs_client *);
struct nfs_server * (*create_server)(struct fs_context *);
struct nfs_server * (*clone_server)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, rpc_authflavor_t);
int (*discover_trunking)(struct nfs_server *, struct nfs_fh *);
void (*enable_swap)(struct inode *);
void (*disable_swap)(struct inode *);
};
6.5: ✅struct nfs_rpc_ops {
u32 version;
const struct dentry_operations *dentry_ops;
const struct inode_operations *dir_inode_ops;
const struct inode_operations *file_inode_ops;
const struct file_operations *file_ops;
const struct nlmclnt_operations *nlmclnt_ops;
int (*getroot)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
int (*submount)(struct fs_context *, struct nfs_server *);
int (*try_get_tree)(struct fs_context *);
int (*getattr)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, struct inode *);
int (*setattr)(struct dentry *, struct nfs_fattr *, struct iattr *);
int (*lookup)(struct inode *, struct dentry *, struct nfs_fh *, struct nfs_fattr *);
int (*lookupp)(struct inode *, struct nfs_fh *, struct nfs_fattr *);
int (*access)(struct inode *, struct nfs_access_entry *, const struct cred *);
int (*readlink)(struct inode *, struct page *, unsigned int, unsigned int);
int (*create)(struct inode *, struct dentry *, struct iattr *, int);
int (*remove)(struct inode *, struct dentry *);
void (*unlink_setup)(struct rpc_message *, struct dentry *, struct inode *);
void (*unlink_rpc_prepare)(struct rpc_task *, struct nfs_unlinkdata *);
int (*unlink_done)(struct rpc_task *, struct inode *);
void (*rename_setup)(struct rpc_message *, struct dentry *, struct dentry *);
void (*rename_rpc_prepare)(struct rpc_task *, struct nfs_renamedata *);
int (*rename_done)(struct rpc_task *, struct inode *, struct inode *);
int (*link)(struct inode *, struct inode *, const struct qstr *);
int (*symlink)(struct inode *, struct dentry *, struct page *, unsigned int, struct iattr *);
int (*mkdir)(struct inode *, struct dentry *, struct iattr *);
int (*rmdir)(struct inode *, const struct qstr *);
int (*readdir)(struct nfs_readdir_arg *, struct nfs_readdir_res *);
int (*mknod)(struct inode *, struct dentry *, struct iattr *, dev_t);
int (*statfs)(struct nfs_server *, struct nfs_fh *, struct nfs_fsstat *);
int (*fsinfo)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
int (*pathconf)(struct nfs_server *, struct nfs_fh *, struct nfs_pathconf *);
int (*set_capabilities)(struct nfs_server *, struct nfs_fh *);
int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, bool);
int (*pgio_rpc_prepare)(struct rpc_task *, struct nfs_pgio_header *);
void (*read_setup)(struct nfs_pgio_header *, struct rpc_message *);
int (*read_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*write_setup)(struct nfs_pgio_header *, struct rpc_message *, struct rpc_clnt **);
int (*write_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*commit_setup)(struct nfs_commit_data *, struct rpc_message *, struct rpc_clnt **);
void (*commit_rpc_prepare)(struct rpc_task *, struct nfs_commit_data *);
int (*commit_done)(struct rpc_task *, struct nfs_commit_data *);
int (*lock)(struct file *, int, struct file_lock *);
int (*lock_check_bounds)(const struct file_lock *);
void (*clear_acl_cache)(struct inode *);
void (*close_context)(struct nfs_open_context *, int);
struct inode * (*open_context)(struct inode *, struct nfs_open_context *, int, struct iattr *, int *);
int (*have_delegation)(struct inode *, fmode_t);
struct nfs_client * (*alloc_client)(const struct nfs_client_initdata *);
struct nfs_client * (*init_client)(struct nfs_client *, const struct nfs_client_initdata *);
void (*free_client)(struct nfs_client *);
struct nfs_server * (*create_server)(struct fs_context *);
struct nfs_server * (*clone_server)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, rpc_authflavor_t);
int (*discover_trunking)(struct nfs_server *, struct nfs_fh *);
void (*enable_swap)(struct inode *);
void (*disable_swap)(struct inode *);
};
6.8: ✅struct nfs_rpc_ops {
u32 version;
const struct dentry_operations *dentry_ops;
const struct inode_operations *dir_inode_ops;
const struct inode_operations *file_inode_ops;
const struct file_operations *file_ops;
const struct nlmclnt_operations *nlmclnt_ops;
int (*getroot)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
int (*submount)(struct fs_context *, struct nfs_server *);
int (*try_get_tree)(struct fs_context *);
int (*getattr)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, struct inode *);
int (*setattr)(struct dentry *, struct nfs_fattr *, struct iattr *);
int (*lookup)(struct inode *, struct dentry *, struct nfs_fh *, struct nfs_fattr *);
int (*lookupp)(struct inode *, struct nfs_fh *, struct nfs_fattr *);
int (*access)(struct inode *, struct nfs_access_entry *, const struct cred *);
int (*readlink)(struct inode *, struct page *, unsigned int, unsigned int);
int (*create)(struct inode *, struct dentry *, struct iattr *, int);
int (*remove)(struct inode *, struct dentry *);
void (*unlink_setup)(struct rpc_message *, struct dentry *, struct inode *);
void (*unlink_rpc_prepare)(struct rpc_task *, struct nfs_unlinkdata *);
int (*unlink_done)(struct rpc_task *, struct inode *);
void (*rename_setup)(struct rpc_message *, struct dentry *, struct dentry *);
void (*rename_rpc_prepare)(struct rpc_task *, struct nfs_renamedata *);
int (*rename_done)(struct rpc_task *, struct inode *, struct inode *);
int (*link)(struct inode *, struct inode *, const struct qstr *);
int (*symlink)(struct inode *, struct dentry *, struct folio *, unsigned int, struct iattr *);
int (*mkdir)(struct inode *, struct dentry *, struct iattr *);
int (*rmdir)(struct inode *, const struct qstr *);
int (*readdir)(struct nfs_readdir_arg *, struct nfs_readdir_res *);
int (*mknod)(struct inode *, struct dentry *, struct iattr *, dev_t);
int (*statfs)(struct nfs_server *, struct nfs_fh *, struct nfs_fsstat *);
int (*fsinfo)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
int (*pathconf)(struct nfs_server *, struct nfs_fh *, struct nfs_pathconf *);
int (*set_capabilities)(struct nfs_server *, struct nfs_fh *);
int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, bool);
int (*pgio_rpc_prepare)(struct rpc_task *, struct nfs_pgio_header *);
void (*read_setup)(struct nfs_pgio_header *, struct rpc_message *);
int (*read_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*write_setup)(struct nfs_pgio_header *, struct rpc_message *, struct rpc_clnt **);
int (*write_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*commit_setup)(struct nfs_commit_data *, struct rpc_message *, struct rpc_clnt **);
void (*commit_rpc_prepare)(struct rpc_task *, struct nfs_commit_data *);
int (*commit_done)(struct rpc_task *, struct nfs_commit_data *);
int (*lock)(struct file *, int, struct file_lock *);
int (*lock_check_bounds)(const struct file_lock *);
void (*clear_acl_cache)(struct inode *);
void (*close_context)(struct nfs_open_context *, int);
struct inode * (*open_context)(struct inode *, struct nfs_open_context *, int, struct iattr *, int *);
int (*have_delegation)(struct inode *, fmode_t);
struct nfs_client * (*alloc_client)(const struct nfs_client_initdata *);
struct nfs_client * (*init_client)(struct nfs_client *, const struct nfs_client_initdata *);
void (*free_client)(struct nfs_client *);
struct nfs_server * (*create_server)(struct fs_context *);
struct nfs_server * (*clone_server)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, rpc_authflavor_t);
int (*discover_trunking)(struct nfs_server *, struct nfs_fh *);
void (*enable_swap)(struct inode *);
void (*disable_swap)(struct inode *);
};
arm64: ✅struct nfs_rpc_ops {
u32 version;
const struct dentry_operations *dentry_ops;
const struct inode_operations *dir_inode_ops;
const struct inode_operations *file_inode_ops;
const struct file_operations *file_ops;
const struct nlmclnt_operations *nlmclnt_ops;
int (*getroot)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
struct vfsmount * (*submount)(struct nfs_server *, struct dentry *, struct nfs_fh *, struct nfs_fattr *);
struct dentry * (*try_mount)(int, const char *, struct nfs_mount_info *, struct nfs_subversion *);
int (*getattr)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *, struct inode *);
int (*setattr)(struct dentry *, struct nfs_fattr *, struct iattr *);
int (*lookup)(struct inode *, const struct qstr *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *);
int (*lookupp)(struct inode *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *);
int (*access)(struct inode *, struct nfs_access_entry *);
int (*readlink)(struct inode *, struct page *, unsigned int, unsigned int);
int (*create)(struct inode *, struct dentry *, struct iattr *, int);
int (*remove)(struct inode *, struct dentry *);
void (*unlink_setup)(struct rpc_message *, struct dentry *, struct inode *);
void (*unlink_rpc_prepare)(struct rpc_task *, struct nfs_unlinkdata *);
int (*unlink_done)(struct rpc_task *, struct inode *);
void (*rename_setup)(struct rpc_message *, struct dentry *, struct dentry *);
void (*rename_rpc_prepare)(struct rpc_task *, struct nfs_renamedata *);
int (*rename_done)(struct rpc_task *, struct inode *, struct inode *);
int (*link)(struct inode *, struct inode *, const struct qstr *);
int (*symlink)(struct inode *, struct dentry *, struct page *, unsigned int, struct iattr *);
int (*mkdir)(struct inode *, struct dentry *, struct iattr *);
int (*rmdir)(struct inode *, const struct qstr *);
int (*readdir)(struct dentry *, const struct cred *, u64, struct page **, unsigned int, bool);
int (*mknod)(struct inode *, struct dentry *, struct iattr *, dev_t);
int (*statfs)(struct nfs_server *, struct nfs_fh *, struct nfs_fsstat *);
int (*fsinfo)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
int (*pathconf)(struct nfs_server *, struct nfs_fh *, struct nfs_pathconf *);
int (*set_capabilities)(struct nfs_server *, struct nfs_fh *);
int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, bool);
int (*pgio_rpc_prepare)(struct rpc_task *, struct nfs_pgio_header *);
void (*read_setup)(struct nfs_pgio_header *, struct rpc_message *);
int (*read_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*write_setup)(struct nfs_pgio_header *, struct rpc_message *, struct rpc_clnt **);
int (*write_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*commit_setup)(struct nfs_commit_data *, struct rpc_message *, struct rpc_clnt **);
void (*commit_rpc_prepare)(struct rpc_task *, struct nfs_commit_data *);
int (*commit_done)(struct rpc_task *, struct nfs_commit_data *);
int (*lock)(struct file *, int, struct file_lock *);
int (*lock_check_bounds)(const struct file_lock *);
void (*clear_acl_cache)(struct inode *);
void (*close_context)(struct nfs_open_context *, int);
struct inode * (*open_context)(struct inode *, struct nfs_open_context *, int, struct iattr *, int *);
int (*have_delegation)(struct inode *, fmode_t);
struct nfs_client * (*alloc_client)(const struct nfs_client_initdata *);
struct nfs_client * (*init_client)(struct nfs_client *, const struct nfs_client_initdata *);
void (*free_client)(struct nfs_client *);
struct nfs_server * (*create_server)(struct nfs_mount_info *, struct nfs_subversion *);
struct nfs_server * (*clone_server)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, rpc_authflavor_t);
};
armhf: ✅struct nfs_rpc_ops {
u32 version;
const struct dentry_operations *dentry_ops;
const struct inode_operations *dir_inode_ops;
const struct inode_operations *file_inode_ops;
const struct file_operations *file_ops;
const struct nlmclnt_operations *nlmclnt_ops;
int (*getroot)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
struct vfsmount * (*submount)(struct nfs_server *, struct dentry *, struct nfs_fh *, struct nfs_fattr *);
struct dentry * (*try_mount)(int, const char *, struct nfs_mount_info *, struct nfs_subversion *);
int (*getattr)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *, struct inode *);
int (*setattr)(struct dentry *, struct nfs_fattr *, struct iattr *);
int (*lookup)(struct inode *, const struct qstr *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *);
int (*lookupp)(struct inode *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *);
int (*access)(struct inode *, struct nfs_access_entry *);
int (*readlink)(struct inode *, struct page *, unsigned int, unsigned int);
int (*create)(struct inode *, struct dentry *, struct iattr *, int);
int (*remove)(struct inode *, struct dentry *);
void (*unlink_setup)(struct rpc_message *, struct dentry *, struct inode *);
void (*unlink_rpc_prepare)(struct rpc_task *, struct nfs_unlinkdata *);
int (*unlink_done)(struct rpc_task *, struct inode *);
void (*rename_setup)(struct rpc_message *, struct dentry *, struct dentry *);
void (*rename_rpc_prepare)(struct rpc_task *, struct nfs_renamedata *);
int (*rename_done)(struct rpc_task *, struct inode *, struct inode *);
int (*link)(struct inode *, struct inode *, const struct qstr *);
int (*symlink)(struct inode *, struct dentry *, struct page *, unsigned int, struct iattr *);
int (*mkdir)(struct inode *, struct dentry *, struct iattr *);
int (*rmdir)(struct inode *, const struct qstr *);
int (*readdir)(struct dentry *, const struct cred *, u64, struct page **, unsigned int, bool);
int (*mknod)(struct inode *, struct dentry *, struct iattr *, dev_t);
int (*statfs)(struct nfs_server *, struct nfs_fh *, struct nfs_fsstat *);
int (*fsinfo)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
int (*pathconf)(struct nfs_server *, struct nfs_fh *, struct nfs_pathconf *);
int (*set_capabilities)(struct nfs_server *, struct nfs_fh *);
int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, bool);
int (*pgio_rpc_prepare)(struct rpc_task *, struct nfs_pgio_header *);
void (*read_setup)(struct nfs_pgio_header *, struct rpc_message *);
int (*read_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*write_setup)(struct nfs_pgio_header *, struct rpc_message *, struct rpc_clnt **);
int (*write_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*commit_setup)(struct nfs_commit_data *, struct rpc_message *, struct rpc_clnt **);
void (*commit_rpc_prepare)(struct rpc_task *, struct nfs_commit_data *);
int (*commit_done)(struct rpc_task *, struct nfs_commit_data *);
int (*lock)(struct file *, int, struct file_lock *);
int (*lock_check_bounds)(const struct file_lock *);
void (*clear_acl_cache)(struct inode *);
void (*close_context)(struct nfs_open_context *, int);
struct inode * (*open_context)(struct inode *, struct nfs_open_context *, int, struct iattr *, int *);
int (*have_delegation)(struct inode *, fmode_t);
struct nfs_client * (*alloc_client)(const struct nfs_client_initdata *);
struct nfs_client * (*init_client)(struct nfs_client *, const struct nfs_client_initdata *);
void (*free_client)(struct nfs_client *);
struct nfs_server * (*create_server)(struct nfs_mount_info *, struct nfs_subversion *);
struct nfs_server * (*clone_server)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, rpc_authflavor_t);
};
ppc64el: ✅struct nfs_rpc_ops {
u32 version;
const struct dentry_operations *dentry_ops;
const struct inode_operations *dir_inode_ops;
const struct inode_operations *file_inode_ops;
const struct file_operations *file_ops;
const struct nlmclnt_operations *nlmclnt_ops;
int (*getroot)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
struct vfsmount * (*submount)(struct nfs_server *, struct dentry *, struct nfs_fh *, struct nfs_fattr *);
struct dentry * (*try_mount)(int, const char *, struct nfs_mount_info *, struct nfs_subversion *);
int (*getattr)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *, struct inode *);
int (*setattr)(struct dentry *, struct nfs_fattr *, struct iattr *);
int (*lookup)(struct inode *, const struct qstr *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *);
int (*lookupp)(struct inode *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *);
int (*access)(struct inode *, struct nfs_access_entry *);
int (*readlink)(struct inode *, struct page *, unsigned int, unsigned int);
int (*create)(struct inode *, struct dentry *, struct iattr *, int);
int (*remove)(struct inode *, struct dentry *);
void (*unlink_setup)(struct rpc_message *, struct dentry *, struct inode *);
void (*unlink_rpc_prepare)(struct rpc_task *, struct nfs_unlinkdata *);
int (*unlink_done)(struct rpc_task *, struct inode *);
void (*rename_setup)(struct rpc_message *, struct dentry *, struct dentry *);
void (*rename_rpc_prepare)(struct rpc_task *, struct nfs_renamedata *);
int (*rename_done)(struct rpc_task *, struct inode *, struct inode *);
int (*link)(struct inode *, struct inode *, const struct qstr *);
int (*symlink)(struct inode *, struct dentry *, struct page *, unsigned int, struct iattr *);
int (*mkdir)(struct inode *, struct dentry *, struct iattr *);
int (*rmdir)(struct inode *, const struct qstr *);
int (*readdir)(struct dentry *, const struct cred *, u64, struct page **, unsigned int, bool);
int (*mknod)(struct inode *, struct dentry *, struct iattr *, dev_t);
int (*statfs)(struct nfs_server *, struct nfs_fh *, struct nfs_fsstat *);
int (*fsinfo)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
int (*pathconf)(struct nfs_server *, struct nfs_fh *, struct nfs_pathconf *);
int (*set_capabilities)(struct nfs_server *, struct nfs_fh *);
int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, bool);
int (*pgio_rpc_prepare)(struct rpc_task *, struct nfs_pgio_header *);
void (*read_setup)(struct nfs_pgio_header *, struct rpc_message *);
int (*read_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*write_setup)(struct nfs_pgio_header *, struct rpc_message *, struct rpc_clnt **);
int (*write_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*commit_setup)(struct nfs_commit_data *, struct rpc_message *, struct rpc_clnt **);
void (*commit_rpc_prepare)(struct rpc_task *, struct nfs_commit_data *);
int (*commit_done)(struct rpc_task *, struct nfs_commit_data *);
int (*lock)(struct file *, int, struct file_lock *);
int (*lock_check_bounds)(const struct file_lock *);
void (*clear_acl_cache)(struct inode *);
void (*close_context)(struct nfs_open_context *, int);
struct inode * (*open_context)(struct inode *, struct nfs_open_context *, int, struct iattr *, int *);
int (*have_delegation)(struct inode *, fmode_t);
struct nfs_client * (*alloc_client)(const struct nfs_client_initdata *);
struct nfs_client * (*init_client)(struct nfs_client *, const struct nfs_client_initdata *);
void (*free_client)(struct nfs_client *);
struct nfs_server * (*create_server)(struct nfs_mount_info *, struct nfs_subversion *);
struct nfs_server * (*clone_server)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, rpc_authflavor_t);
};
riscv64: ✅struct nfs_rpc_ops {
u32 version;
const struct dentry_operations *dentry_ops;
const struct inode_operations *dir_inode_ops;
const struct inode_operations *file_inode_ops;
const struct file_operations *file_ops;
const struct nlmclnt_operations *nlmclnt_ops;
int (*getroot)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
struct vfsmount * (*submount)(struct nfs_server *, struct dentry *, struct nfs_fh *, struct nfs_fattr *);
struct dentry * (*try_mount)(int, const char *, struct nfs_mount_info *, struct nfs_subversion *);
int (*getattr)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *, struct inode *);
int (*setattr)(struct dentry *, struct nfs_fattr *, struct iattr *);
int (*lookup)(struct inode *, const struct qstr *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *);
int (*lookupp)(struct inode *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *);
int (*access)(struct inode *, struct nfs_access_entry *);
int (*readlink)(struct inode *, struct page *, unsigned int, unsigned int);
int (*create)(struct inode *, struct dentry *, struct iattr *, int);
int (*remove)(struct inode *, struct dentry *);
void (*unlink_setup)(struct rpc_message *, struct dentry *, struct inode *);
void (*unlink_rpc_prepare)(struct rpc_task *, struct nfs_unlinkdata *);
int (*unlink_done)(struct rpc_task *, struct inode *);
void (*rename_setup)(struct rpc_message *, struct dentry *, struct dentry *);
void (*rename_rpc_prepare)(struct rpc_task *, struct nfs_renamedata *);
int (*rename_done)(struct rpc_task *, struct inode *, struct inode *);
int (*link)(struct inode *, struct inode *, const struct qstr *);
int (*symlink)(struct inode *, struct dentry *, struct page *, unsigned int, struct iattr *);
int (*mkdir)(struct inode *, struct dentry *, struct iattr *);
int (*rmdir)(struct inode *, const struct qstr *);
int (*readdir)(struct dentry *, const struct cred *, u64, struct page **, unsigned int, bool);
int (*mknod)(struct inode *, struct dentry *, struct iattr *, dev_t);
int (*statfs)(struct nfs_server *, struct nfs_fh *, struct nfs_fsstat *);
int (*fsinfo)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
int (*pathconf)(struct nfs_server *, struct nfs_fh *, struct nfs_pathconf *);
int (*set_capabilities)(struct nfs_server *, struct nfs_fh *);
int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, bool);
int (*pgio_rpc_prepare)(struct rpc_task *, struct nfs_pgio_header *);
void (*read_setup)(struct nfs_pgio_header *, struct rpc_message *);
int (*read_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*write_setup)(struct nfs_pgio_header *, struct rpc_message *, struct rpc_clnt **);
int (*write_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*commit_setup)(struct nfs_commit_data *, struct rpc_message *, struct rpc_clnt **);
void (*commit_rpc_prepare)(struct rpc_task *, struct nfs_commit_data *);
int (*commit_done)(struct rpc_task *, struct nfs_commit_data *);
int (*lock)(struct file *, int, struct file_lock *);
int (*lock_check_bounds)(const struct file_lock *);
void (*clear_acl_cache)(struct inode *);
void (*close_context)(struct nfs_open_context *, int);
struct inode * (*open_context)(struct inode *, struct nfs_open_context *, int, struct iattr *, int *);
int (*have_delegation)(struct inode *, fmode_t);
struct nfs_client * (*alloc_client)(const struct nfs_client_initdata *);
struct nfs_client * (*init_client)(struct nfs_client *, const struct nfs_client_initdata *);
void (*free_client)(struct nfs_client *);
struct nfs_server * (*create_server)(struct nfs_mount_info *, struct nfs_subversion *);
struct nfs_server * (*clone_server)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, rpc_authflavor_t);
};
aws: ✅struct nfs_rpc_ops {
u32 version;
const struct dentry_operations *dentry_ops;
const struct inode_operations *dir_inode_ops;
const struct inode_operations *file_inode_ops;
const struct file_operations *file_ops;
const struct nlmclnt_operations *nlmclnt_ops;
int (*getroot)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
struct vfsmount * (*submount)(struct nfs_server *, struct dentry *, struct nfs_fh *, struct nfs_fattr *);
struct dentry * (*try_mount)(int, const char *, struct nfs_mount_info *, struct nfs_subversion *);
int (*getattr)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *, struct inode *);
int (*setattr)(struct dentry *, struct nfs_fattr *, struct iattr *);
int (*lookup)(struct inode *, const struct qstr *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *);
int (*lookupp)(struct inode *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *);
int (*access)(struct inode *, struct nfs_access_entry *);
int (*readlink)(struct inode *, struct page *, unsigned int, unsigned int);
int (*create)(struct inode *, struct dentry *, struct iattr *, int);
int (*remove)(struct inode *, struct dentry *);
void (*unlink_setup)(struct rpc_message *, struct dentry *, struct inode *);
void (*unlink_rpc_prepare)(struct rpc_task *, struct nfs_unlinkdata *);
int (*unlink_done)(struct rpc_task *, struct inode *);
void (*rename_setup)(struct rpc_message *, struct dentry *, struct dentry *);
void (*rename_rpc_prepare)(struct rpc_task *, struct nfs_renamedata *);
int (*rename_done)(struct rpc_task *, struct inode *, struct inode *);
int (*link)(struct inode *, struct inode *, const struct qstr *);
int (*symlink)(struct inode *, struct dentry *, struct page *, unsigned int, struct iattr *);
int (*mkdir)(struct inode *, struct dentry *, struct iattr *);
int (*rmdir)(struct inode *, const struct qstr *);
int (*readdir)(struct dentry *, const struct cred *, u64, struct page **, unsigned int, bool);
int (*mknod)(struct inode *, struct dentry *, struct iattr *, dev_t);
int (*statfs)(struct nfs_server *, struct nfs_fh *, struct nfs_fsstat *);
int (*fsinfo)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
int (*pathconf)(struct nfs_server *, struct nfs_fh *, struct nfs_pathconf *);
int (*set_capabilities)(struct nfs_server *, struct nfs_fh *);
int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, bool);
int (*pgio_rpc_prepare)(struct rpc_task *, struct nfs_pgio_header *);
void (*read_setup)(struct nfs_pgio_header *, struct rpc_message *);
int (*read_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*write_setup)(struct nfs_pgio_header *, struct rpc_message *, struct rpc_clnt **);
int (*write_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*commit_setup)(struct nfs_commit_data *, struct rpc_message *, struct rpc_clnt **);
void (*commit_rpc_prepare)(struct rpc_task *, struct nfs_commit_data *);
int (*commit_done)(struct rpc_task *, struct nfs_commit_data *);
int (*lock)(struct file *, int, struct file_lock *);
int (*lock_check_bounds)(const struct file_lock *);
void (*clear_acl_cache)(struct inode *);
void (*close_context)(struct nfs_open_context *, int);
struct inode * (*open_context)(struct inode *, struct nfs_open_context *, int, struct iattr *, int *);
int (*have_delegation)(struct inode *, fmode_t);
struct nfs_client * (*alloc_client)(const struct nfs_client_initdata *);
struct nfs_client * (*init_client)(struct nfs_client *, const struct nfs_client_initdata *);
void (*free_client)(struct nfs_client *);
struct nfs_server * (*create_server)(struct nfs_mount_info *, struct nfs_subversion *);
struct nfs_server * (*clone_server)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, rpc_authflavor_t);
};
azure: ✅struct nfs_rpc_ops {
u32 version;
const struct dentry_operations *dentry_ops;
const struct inode_operations *dir_inode_ops;
const struct inode_operations *file_inode_ops;
const struct file_operations *file_ops;
const struct nlmclnt_operations *nlmclnt_ops;
int (*getroot)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
struct vfsmount * (*submount)(struct nfs_server *, struct dentry *, struct nfs_fh *, struct nfs_fattr *);
struct dentry * (*try_mount)(int, const char *, struct nfs_mount_info *, struct nfs_subversion *);
int (*getattr)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *, struct inode *);
int (*setattr)(struct dentry *, struct nfs_fattr *, struct iattr *);
int (*lookup)(struct inode *, const struct qstr *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *);
int (*lookupp)(struct inode *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *);
int (*access)(struct inode *, struct nfs_access_entry *);
int (*readlink)(struct inode *, struct page *, unsigned int, unsigned int);
int (*create)(struct inode *, struct dentry *, struct iattr *, int);
int (*remove)(struct inode *, struct dentry *);
void (*unlink_setup)(struct rpc_message *, struct dentry *, struct inode *);
void (*unlink_rpc_prepare)(struct rpc_task *, struct nfs_unlinkdata *);
int (*unlink_done)(struct rpc_task *, struct inode *);
void (*rename_setup)(struct rpc_message *, struct dentry *, struct dentry *);
void (*rename_rpc_prepare)(struct rpc_task *, struct nfs_renamedata *);
int (*rename_done)(struct rpc_task *, struct inode *, struct inode *);
int (*link)(struct inode *, struct inode *, const struct qstr *);
int (*symlink)(struct inode *, struct dentry *, struct page *, unsigned int, struct iattr *);
int (*mkdir)(struct inode *, struct dentry *, struct iattr *);
int (*rmdir)(struct inode *, const struct qstr *);
int (*readdir)(struct dentry *, const struct cred *, u64, struct page **, unsigned int, bool);
int (*mknod)(struct inode *, struct dentry *, struct iattr *, dev_t);
int (*statfs)(struct nfs_server *, struct nfs_fh *, struct nfs_fsstat *);
int (*fsinfo)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
int (*pathconf)(struct nfs_server *, struct nfs_fh *, struct nfs_pathconf *);
int (*set_capabilities)(struct nfs_server *, struct nfs_fh *);
int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, bool);
int (*pgio_rpc_prepare)(struct rpc_task *, struct nfs_pgio_header *);
void (*read_setup)(struct nfs_pgio_header *, struct rpc_message *);
int (*read_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*write_setup)(struct nfs_pgio_header *, struct rpc_message *, struct rpc_clnt **);
int (*write_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*commit_setup)(struct nfs_commit_data *, struct rpc_message *, struct rpc_clnt **);
void (*commit_rpc_prepare)(struct rpc_task *, struct nfs_commit_data *);
int (*commit_done)(struct rpc_task *, struct nfs_commit_data *);
int (*lock)(struct file *, int, struct file_lock *);
int (*lock_check_bounds)(const struct file_lock *);
void (*clear_acl_cache)(struct inode *);
void (*close_context)(struct nfs_open_context *, int);
struct inode * (*open_context)(struct inode *, struct nfs_open_context *, int, struct iattr *, int *);
int (*have_delegation)(struct inode *, fmode_t);
struct nfs_client * (*alloc_client)(const struct nfs_client_initdata *);
struct nfs_client * (*init_client)(struct nfs_client *, const struct nfs_client_initdata *);
void (*free_client)(struct nfs_client *);
struct nfs_server * (*create_server)(struct nfs_mount_info *, struct nfs_subversion *);
struct nfs_server * (*clone_server)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, rpc_authflavor_t);
};
gcp: ✅struct nfs_rpc_ops {
u32 version;
const struct dentry_operations *dentry_ops;
const struct inode_operations *dir_inode_ops;
const struct inode_operations *file_inode_ops;
const struct file_operations *file_ops;
const struct nlmclnt_operations *nlmclnt_ops;
int (*getroot)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
struct vfsmount * (*submount)(struct nfs_server *, struct dentry *, struct nfs_fh *, struct nfs_fattr *);
struct dentry * (*try_mount)(int, const char *, struct nfs_mount_info *, struct nfs_subversion *);
int (*getattr)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *, struct inode *);
int (*setattr)(struct dentry *, struct nfs_fattr *, struct iattr *);
int (*lookup)(struct inode *, const struct qstr *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *);
int (*lookupp)(struct inode *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *);
int (*access)(struct inode *, struct nfs_access_entry *);
int (*readlink)(struct inode *, struct page *, unsigned int, unsigned int);
int (*create)(struct inode *, struct dentry *, struct iattr *, int);
int (*remove)(struct inode *, struct dentry *);
void (*unlink_setup)(struct rpc_message *, struct dentry *, struct inode *);
void (*unlink_rpc_prepare)(struct rpc_task *, struct nfs_unlinkdata *);
int (*unlink_done)(struct rpc_task *, struct inode *);
void (*rename_setup)(struct rpc_message *, struct dentry *, struct dentry *);
void (*rename_rpc_prepare)(struct rpc_task *, struct nfs_renamedata *);
int (*rename_done)(struct rpc_task *, struct inode *, struct inode *);
int (*link)(struct inode *, struct inode *, const struct qstr *);
int (*symlink)(struct inode *, struct dentry *, struct page *, unsigned int, struct iattr *);
int (*mkdir)(struct inode *, struct dentry *, struct iattr *);
int (*rmdir)(struct inode *, const struct qstr *);
int (*readdir)(struct dentry *, const struct cred *, u64, struct page **, unsigned int, bool);
int (*mknod)(struct inode *, struct dentry *, struct iattr *, dev_t);
int (*statfs)(struct nfs_server *, struct nfs_fh *, struct nfs_fsstat *);
int (*fsinfo)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
int (*pathconf)(struct nfs_server *, struct nfs_fh *, struct nfs_pathconf *);
int (*set_capabilities)(struct nfs_server *, struct nfs_fh *);
int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, bool);
int (*pgio_rpc_prepare)(struct rpc_task *, struct nfs_pgio_header *);
void (*read_setup)(struct nfs_pgio_header *, struct rpc_message *);
int (*read_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*write_setup)(struct nfs_pgio_header *, struct rpc_message *, struct rpc_clnt **);
int (*write_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*commit_setup)(struct nfs_commit_data *, struct rpc_message *, struct rpc_clnt **);
void (*commit_rpc_prepare)(struct rpc_task *, struct nfs_commit_data *);
int (*commit_done)(struct rpc_task *, struct nfs_commit_data *);
int (*lock)(struct file *, int, struct file_lock *);
int (*lock_check_bounds)(const struct file_lock *);
void (*clear_acl_cache)(struct inode *);
void (*close_context)(struct nfs_open_context *, int);
struct inode * (*open_context)(struct inode *, struct nfs_open_context *, int, struct iattr *, int *);
int (*have_delegation)(struct inode *, fmode_t);
struct nfs_client * (*alloc_client)(const struct nfs_client_initdata *);
struct nfs_client * (*init_client)(struct nfs_client *, const struct nfs_client_initdata *);
void (*free_client)(struct nfs_client *);
struct nfs_server * (*create_server)(struct nfs_mount_info *, struct nfs_subversion *);
struct nfs_server * (*clone_server)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, rpc_authflavor_t);
};
lowlatency: ✅struct nfs_rpc_ops {
u32 version;
const struct dentry_operations *dentry_ops;
const struct inode_operations *dir_inode_ops;
const struct inode_operations *file_inode_ops;
const struct file_operations *file_ops;
const struct nlmclnt_operations *nlmclnt_ops;
int (*getroot)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
struct vfsmount * (*submount)(struct nfs_server *, struct dentry *, struct nfs_fh *, struct nfs_fattr *);
struct dentry * (*try_mount)(int, const char *, struct nfs_mount_info *, struct nfs_subversion *);
int (*getattr)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *, struct inode *);
int (*setattr)(struct dentry *, struct nfs_fattr *, struct iattr *);
int (*lookup)(struct inode *, const struct qstr *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *);
int (*lookupp)(struct inode *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *);
int (*access)(struct inode *, struct nfs_access_entry *);
int (*readlink)(struct inode *, struct page *, unsigned int, unsigned int);
int (*create)(struct inode *, struct dentry *, struct iattr *, int);
int (*remove)(struct inode *, struct dentry *);
void (*unlink_setup)(struct rpc_message *, struct dentry *, struct inode *);
void (*unlink_rpc_prepare)(struct rpc_task *, struct nfs_unlinkdata *);
int (*unlink_done)(struct rpc_task *, struct inode *);
void (*rename_setup)(struct rpc_message *, struct dentry *, struct dentry *);
void (*rename_rpc_prepare)(struct rpc_task *, struct nfs_renamedata *);
int (*rename_done)(struct rpc_task *, struct inode *, struct inode *);
int (*link)(struct inode *, struct inode *, const struct qstr *);
int (*symlink)(struct inode *, struct dentry *, struct page *, unsigned int, struct iattr *);
int (*mkdir)(struct inode *, struct dentry *, struct iattr *);
int (*rmdir)(struct inode *, const struct qstr *);
int (*readdir)(struct dentry *, const struct cred *, u64, struct page **, unsigned int, bool);
int (*mknod)(struct inode *, struct dentry *, struct iattr *, dev_t);
int (*statfs)(struct nfs_server *, struct nfs_fh *, struct nfs_fsstat *);
int (*fsinfo)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
int (*pathconf)(struct nfs_server *, struct nfs_fh *, struct nfs_pathconf *);
int (*set_capabilities)(struct nfs_server *, struct nfs_fh *);
int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, bool);
int (*pgio_rpc_prepare)(struct rpc_task *, struct nfs_pgio_header *);
void (*read_setup)(struct nfs_pgio_header *, struct rpc_message *);
int (*read_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*write_setup)(struct nfs_pgio_header *, struct rpc_message *, struct rpc_clnt **);
int (*write_done)(struct rpc_task *, struct nfs_pgio_header *);
void (*commit_setup)(struct nfs_commit_data *, struct rpc_message *, struct rpc_clnt **);
void (*commit_rpc_prepare)(struct rpc_task *, struct nfs_commit_data *);
int (*commit_done)(struct rpc_task *, struct nfs_commit_data *);
int (*lock)(struct file *, int, struct file_lock *);
int (*lock_check_bounds)(const struct file_lock *);
void (*clear_acl_cache)(struct inode *);
void (*close_context)(struct nfs_open_context *, int);
struct inode * (*open_context)(struct inode *, struct nfs_open_context *, int, struct iattr *, int *);
int (*have_delegation)(struct inode *, fmode_t);
struct nfs_client * (*alloc_client)(const struct nfs_client_initdata *);
struct nfs_client * (*init_client)(struct nfs_client *, const struct nfs_client_initdata *);
void (*free_client)(struct nfs_client *);
struct nfs_server * (*create_server)(struct nfs_mount_info *, struct nfs_subversion *);
struct nfs_server * (*clone_server)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, rpc_authflavor_t);
};
Regular
4.8 and 4.10 ✅
4.10 and 4.13 ⚠️const struct nlmclnt_operations *nlmclnt_ops
int (*lookupp)(struct inode *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *)
int (*readdir)(struct dentry *, struct rpc_cred *, u64, struct page **, unsigned int, int) ➡️ int (*readdir)(struct dentry *, struct rpc_cred *, u64, struct page **, unsigned int, bool)
int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, int) ➡️ int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, bool)
4.13 and 4.15 ✅
4.15 and 4.18 ⚠️int (*return_delegation)(struct inode *)
int (*getattr)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *) ➡️ int (*getattr)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *, struct inode *)
int (*remove)(struct inode *, const struct qstr *) ➡️ int (*remove)(struct inode *, struct dentry *)
void (*unlink_setup)(struct rpc_message *, struct inode *) ➡️ void (*unlink_setup)(struct rpc_message *, struct dentry *, struct inode *)
void (*rename_setup)(struct rpc_message *, struct inode *) ➡️ void (*rename_setup)(struct rpc_message *, struct dentry *, struct dentry *)
void (*write_setup)(struct nfs_pgio_header *, struct rpc_message *) ➡️ void (*write_setup)(struct nfs_pgio_header *, struct rpc_message *, struct rpc_clnt **)
void (*commit_setup)(struct nfs_commit_data *, struct rpc_message *) ➡️ void (*commit_setup)(struct nfs_commit_data *, struct rpc_message *, struct rpc_clnt **)
4.18 and 5.0 ⚠️int (*readdir)(struct dentry *, struct rpc_cred *, u64, struct page **, unsigned int, bool) ➡️ int (*readdir)(struct dentry *, const struct cred *, u64, struct page **, unsigned int, bool)
5.0 and 5.3 ✅
5.3 and 5.4 ✅
5.13 and 5.15 ⚠️int (*discover_trunking)(struct nfs_server *, struct nfs_fh *)
5.15 and 5.19 ⚠️void (*enable_swap)(struct inode *)
void (*disable_swap)(struct inode *)
int (*getattr)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *, struct inode *) ➡️ int (*getattr)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, struct inode *)
int (*lookup)(struct inode *, struct dentry *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *) ➡️ int (*lookup)(struct inode *, struct dentry *, struct nfs_fh *, struct nfs_fattr *)
int (*lookupp)(struct inode *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *) ➡️ int (*lookupp)(struct inode *, struct nfs_fh *, struct nfs_fattr *)
int (*access)(struct inode *, struct nfs_access_entry *) ➡️ int (*access)(struct inode *, struct nfs_access_entry *, const struct cred *)
5.19 and 6.2 ✅
6.2 and 6.5 ✅
6.5 and 6.8 ⚠️int (*symlink)(struct inode *, struct dentry *, struct page *, unsigned int, struct iattr *) ➡️ int (*symlink)(struct inode *, struct dentry *, struct folio *, unsigned int, struct iattr *)
amd64 and arm64 ✅
amd64 and armhf ✅
amd64 and ppc64el ✅
amd64 and riscv64 ✅
generic and aws ✅
generic and azure ✅
generic and gcp ✅
generic and lowlatency ✅