#include <linux/mm.h>
#include <linux/errno.h>
#include <linux/string.h>
#include <linux/sunrpc/clnt.h>
#include <linux/slab.h>
#include <linux/nfs.h>
#include <linux/nfs3.h>
#include <linux/nfs_fs.h>
#include <linux/nfs_page.h>
#include <linux/lockd/bind.h>
#include <linux/nfs_mount.h>
#include <linux/freezer.h>
#include <linux/xattr.h>
#include "iostat.h"
#include "internal.h"
#include "nfs3_fs.h"
#define NFSDBG_FACILITY …
static int
nfs3_rpc_wrapper(struct rpc_clnt *clnt, struct rpc_message *msg, int flags)
{ … }
#define rpc_call_sync(clnt, msg, flags) …
static int
nfs3_async_handle_jukebox(struct rpc_task *task, struct inode *inode)
{ … }
static int
do_proc_get_root(struct rpc_clnt *client, struct nfs_fh *fhandle,
struct nfs_fsinfo *info)
{ … }
static int
nfs3_proc_get_root(struct nfs_server *server, struct nfs_fh *fhandle,
struct nfs_fsinfo *info)
{ … }
static int
nfs3_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle,
struct nfs_fattr *fattr, struct inode *inode)
{ … }
static int
nfs3_proc_setattr(struct dentry *dentry, struct nfs_fattr *fattr,
struct iattr *sattr)
{ … }
static int
__nfs3_proc_lookup(struct inode *dir, const char *name, size_t len,
struct nfs_fh *fhandle, struct nfs_fattr *fattr,
unsigned short task_flags)
{ … }
static int
nfs3_proc_lookup(struct inode *dir, struct dentry *dentry,
struct nfs_fh *fhandle, struct nfs_fattr *fattr)
{ … }
static int nfs3_proc_lookupp(struct inode *inode, struct nfs_fh *fhandle,
struct nfs_fattr *fattr)
{ … }
static int nfs3_proc_access(struct inode *inode, struct nfs_access_entry *entry,
const struct cred *cred)
{ … }
static int nfs3_proc_readlink(struct inode *inode, struct page *page,
unsigned int pgbase, unsigned int pglen)
{ … }
struct nfs3_createdata { … };
static struct nfs3_createdata *nfs3_alloc_createdata(void)
{ … }
static struct dentry *
nfs3_do_create(struct inode *dir, struct dentry *dentry, struct nfs3_createdata *data)
{ … }
static void nfs3_free_createdata(struct nfs3_createdata *data)
{ … }
static int
nfs3_proc_create(struct inode *dir, struct dentry *dentry, struct iattr *sattr,
int flags)
{ … }
static int
nfs3_proc_remove(struct inode *dir, struct dentry *dentry)
{ … }
static void
nfs3_proc_unlink_setup(struct rpc_message *msg,
struct dentry *dentry,
struct inode *inode)
{ … }
static void nfs3_proc_unlink_rpc_prepare(struct rpc_task *task, struct nfs_unlinkdata *data)
{ … }
static int
nfs3_proc_unlink_done(struct rpc_task *task, struct inode *dir)
{ … }
static void
nfs3_proc_rename_setup(struct rpc_message *msg,
struct dentry *old_dentry,
struct dentry *new_dentry)
{ … }
static void nfs3_proc_rename_rpc_prepare(struct rpc_task *task, struct nfs_renamedata *data)
{ … }
static int
nfs3_proc_rename_done(struct rpc_task *task, struct inode *old_dir,
struct inode *new_dir)
{ … }
static int
nfs3_proc_link(struct inode *inode, struct inode *dir, const struct qstr *name)
{ … }
static int
nfs3_proc_symlink(struct inode *dir, struct dentry *dentry, struct folio *folio,
unsigned int len, struct iattr *sattr)
{ … }
static int
nfs3_proc_mkdir(struct inode *dir, struct dentry *dentry, struct iattr *sattr)
{ … }
static int
nfs3_proc_rmdir(struct inode *dir, const struct qstr *name)
{ … }
static int nfs3_proc_readdir(struct nfs_readdir_arg *nr_arg,
struct nfs_readdir_res *nr_res)
{ … }
static int
nfs3_proc_mknod(struct inode *dir, struct dentry *dentry, struct iattr *sattr,
dev_t rdev)
{ … }
static int
nfs3_proc_statfs(struct nfs_server *server, struct nfs_fh *fhandle,
struct nfs_fsstat *stat)
{ … }
static int
do_proc_fsinfo(struct rpc_clnt *client, struct nfs_fh *fhandle,
struct nfs_fsinfo *info)
{ … }
static int
nfs3_proc_fsinfo(struct nfs_server *server, struct nfs_fh *fhandle,
struct nfs_fsinfo *info)
{ … }
static int
nfs3_proc_pathconf(struct nfs_server *server, struct nfs_fh *fhandle,
struct nfs_pathconf *info)
{ … }
static int nfs3_read_done(struct rpc_task *task, struct nfs_pgio_header *hdr)
{ … }
static void nfs3_proc_read_setup(struct nfs_pgio_header *hdr,
struct rpc_message *msg)
{ … }
static int nfs3_proc_pgio_rpc_prepare(struct rpc_task *task,
struct nfs_pgio_header *hdr)
{ … }
static int nfs3_write_done(struct rpc_task *task, struct nfs_pgio_header *hdr)
{ … }
static void nfs3_proc_write_setup(struct nfs_pgio_header *hdr,
struct rpc_message *msg,
struct rpc_clnt **clnt)
{ … }
static void nfs3_proc_commit_rpc_prepare(struct rpc_task *task, struct nfs_commit_data *data)
{ … }
static int nfs3_commit_done(struct rpc_task *task, struct nfs_commit_data *data)
{ … }
static void nfs3_proc_commit_setup(struct nfs_commit_data *data, struct rpc_message *msg,
struct rpc_clnt **clnt)
{ … }
static void nfs3_nlm_alloc_call(void *data)
{ … }
static bool nfs3_nlm_unlock_prepare(struct rpc_task *task, void *data)
{ … }
static void nfs3_nlm_release_call(void *data)
{ … }
static const struct nlmclnt_operations nlmclnt_fl_close_lock_ops = …;
static int
nfs3_proc_lock(struct file *filp, int cmd, struct file_lock *fl)
{ … }
static int nfs3_have_delegation(struct inode *inode, fmode_t type, int flags)
{ … }
static int nfs3_return_delegation(struct inode *inode)
{ … }
static const struct inode_operations nfs3_dir_inode_operations = …;
static const struct inode_operations nfs3_file_inode_operations = …;
const struct nfs_rpc_ops nfs_v3_clientops = …;