1 // SPDX-License-Identifier: GPL-2.0
5 * Copyright (C) 1992, 1993, 1994 Rick Sladkey
7 * OS-independent nfs remote procedure call functions
10 * so at last we can have decent(ish) throughput off a
13 * Coding optimized and cleaned up by Florian La Roche.
14 * Note: Error returns are optimized for NFS_OK, which isn't translated via
15 * nfs_stat_to_errno(), but happens to be already the right return code.
17 * Also, the code currently doesn't check the size of the packet, when
18 * it decodes the packet.
20 * Feel free to fix it and mail me the diffs if it worries you.
22 * Completely rewritten to support the new RPC call interface;
23 * rewrote and moved the entire XDR stuff to xdr.c
24 * --Olaf Kirch June 1996
26 * The code below initializes all auto variables explicitly, otherwise
27 * it will fail to work as a module (gcc generates a memset call for an
31 #include <linux/types.h>
32 #include <linux/param.h>
33 #include <linux/time.h>
35 #include <linux/errno.h>
36 #include <linux/string.h>
38 #include <linux/pagemap.h>
39 #include <linux/sunrpc/clnt.h>
40 #include <linux/nfs.h>
41 #include <linux/nfs2.h>
42 #include <linux/nfs_fs.h>
43 #include <linux/nfs_page.h>
44 #include <linux/lockd/bind.h>
45 #include <linux/freezer.h>
48 #define NFSDBG_FACILITY NFSDBG_PROC
51 * Bare-bones access to getattr: this is for nfs_read_super.
54 nfs_proc_get_root(struct nfs_server *server, struct nfs_fh *fhandle,
55 struct nfs_fsinfo *info)
57 struct nfs_fattr *fattr = info->fattr;
58 struct nfs2_fsstat fsinfo;
59 struct rpc_message msg = {
60 .rpc_proc = &nfs_procedures[NFSPROC_GETATTR],
66 dprintk("%s: call getattr\n", __func__);
67 nfs_fattr_init(fattr);
68 status = rpc_call_sync(server->client, &msg, 0);
69 /* Retry with default authentication if different */
70 if (status && server->nfs_client->cl_rpcclient != server->client)
71 status = rpc_call_sync(server->nfs_client->cl_rpcclient, &msg, 0);
72 dprintk("%s: reply getattr: %d\n", __func__, status);
75 dprintk("%s: call statfs\n", __func__);
76 msg.rpc_proc = &nfs_procedures[NFSPROC_STATFS];
77 msg.rpc_resp = &fsinfo;
78 status = rpc_call_sync(server->client, &msg, 0);
79 /* Retry with default authentication if different */
80 if (status && server->nfs_client->cl_rpcclient != server->client)
81 status = rpc_call_sync(server->nfs_client->cl_rpcclient, &msg, 0);
82 dprintk("%s: reply statfs: %d\n", __func__, status);
85 info->rtmax = NFS_MAXDATA;
86 info->rtpref = fsinfo.tsize;
87 info->rtmult = fsinfo.bsize;
88 info->wtmax = NFS_MAXDATA;
89 info->wtpref = fsinfo.tsize;
90 info->wtmult = fsinfo.bsize;
91 info->dtpref = fsinfo.tsize;
92 info->maxfilesize = 0x7FFFFFFF;
98 * One function for each procedure in the NFS protocol.
101 nfs_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle,
102 struct nfs_fattr *fattr, struct nfs4_label *label)
104 struct rpc_message msg = {
105 .rpc_proc = &nfs_procedures[NFSPROC_GETATTR],
111 dprintk("NFS call getattr\n");
112 nfs_fattr_init(fattr);
113 status = rpc_call_sync(server->client, &msg, 0);
114 dprintk("NFS reply getattr: %d\n", status);
119 nfs_proc_setattr(struct dentry *dentry, struct nfs_fattr *fattr,
122 struct inode *inode = d_inode(dentry);
123 struct nfs_sattrargs arg = {
127 struct rpc_message msg = {
128 .rpc_proc = &nfs_procedures[NFSPROC_SETATTR],
134 /* Mask out the non-modebit related stuff from attr->ia_mode */
135 sattr->ia_mode &= S_IALLUGO;
137 dprintk("NFS call setattr\n");
138 if (sattr->ia_valid & ATTR_FILE)
139 msg.rpc_cred = nfs_file_cred(sattr->ia_file);
140 nfs_fattr_init(fattr);
141 status = rpc_call_sync(NFS_CLIENT(inode), &msg, 0);
143 nfs_setattr_update_inode(inode, sattr, fattr);
144 dprintk("NFS reply setattr: %d\n", status);
149 nfs_proc_lookup(struct inode *dir, const struct qstr *name,
150 struct nfs_fh *fhandle, struct nfs_fattr *fattr,
151 struct nfs4_label *label)
153 struct nfs_diropargs arg = {
158 struct nfs_diropok res = {
162 struct rpc_message msg = {
163 .rpc_proc = &nfs_procedures[NFSPROC_LOOKUP],
169 dprintk("NFS call lookup %s\n", name->name);
170 nfs_fattr_init(fattr);
171 status = rpc_call_sync(NFS_CLIENT(dir), &msg, 0);
172 dprintk("NFS reply lookup: %d\n", status);
176 static int nfs_proc_readlink(struct inode *inode, struct page *page,
177 unsigned int pgbase, unsigned int pglen)
179 struct nfs_readlinkargs args = {
185 struct rpc_message msg = {
186 .rpc_proc = &nfs_procedures[NFSPROC_READLINK],
191 dprintk("NFS call readlink\n");
192 status = rpc_call_sync(NFS_CLIENT(inode), &msg, 0);
193 dprintk("NFS reply readlink: %d\n", status);
197 struct nfs_createdata {
198 struct nfs_createargs arg;
199 struct nfs_diropok res;
200 struct nfs_fh fhandle;
201 struct nfs_fattr fattr;
204 static struct nfs_createdata *nfs_alloc_createdata(struct inode *dir,
205 struct dentry *dentry, struct iattr *sattr)
207 struct nfs_createdata *data;
209 data = kmalloc(sizeof(*data), GFP_KERNEL);
212 data->arg.fh = NFS_FH(dir);
213 data->arg.name = dentry->d_name.name;
214 data->arg.len = dentry->d_name.len;
215 data->arg.sattr = sattr;
216 nfs_fattr_init(&data->fattr);
217 data->fhandle.size = 0;
218 data->res.fh = &data->fhandle;
219 data->res.fattr = &data->fattr;
224 static void nfs_free_createdata(const struct nfs_createdata *data)
230 nfs_proc_create(struct inode *dir, struct dentry *dentry, struct iattr *sattr,
233 struct nfs_createdata *data;
234 struct rpc_message msg = {
235 .rpc_proc = &nfs_procedures[NFSPROC_CREATE],
237 int status = -ENOMEM;
239 dprintk("NFS call create %pd\n", dentry);
240 data = nfs_alloc_createdata(dir, dentry, sattr);
243 msg.rpc_argp = &data->arg;
244 msg.rpc_resp = &data->res;
245 status = rpc_call_sync(NFS_CLIENT(dir), &msg, 0);
246 nfs_mark_for_revalidate(dir);
248 status = nfs_instantiate(dentry, data->res.fh, data->res.fattr, NULL);
249 nfs_free_createdata(data);
251 dprintk("NFS reply create: %d\n", status);
256 * In NFSv2, mknod is grafted onto the create call.
259 nfs_proc_mknod(struct inode *dir, struct dentry *dentry, struct iattr *sattr,
262 struct nfs_createdata *data;
263 struct rpc_message msg = {
264 .rpc_proc = &nfs_procedures[NFSPROC_CREATE],
267 int status = -ENOMEM;
269 dprintk("NFS call mknod %pd\n", dentry);
271 mode = sattr->ia_mode;
272 if (S_ISFIFO(mode)) {
273 sattr->ia_mode = (mode & ~S_IFMT) | S_IFCHR;
274 sattr->ia_valid &= ~ATTR_SIZE;
275 } else if (S_ISCHR(mode) || S_ISBLK(mode)) {
276 sattr->ia_valid |= ATTR_SIZE;
277 sattr->ia_size = new_encode_dev(rdev);/* get out your barf bag */
280 data = nfs_alloc_createdata(dir, dentry, sattr);
283 msg.rpc_argp = &data->arg;
284 msg.rpc_resp = &data->res;
286 status = rpc_call_sync(NFS_CLIENT(dir), &msg, 0);
287 nfs_mark_for_revalidate(dir);
289 if (status == -EINVAL && S_ISFIFO(mode)) {
290 sattr->ia_mode = mode;
291 nfs_fattr_init(data->res.fattr);
292 status = rpc_call_sync(NFS_CLIENT(dir), &msg, 0);
295 status = nfs_instantiate(dentry, data->res.fh, data->res.fattr, NULL);
296 nfs_free_createdata(data);
298 dprintk("NFS reply mknod: %d\n", status);
303 nfs_proc_remove(struct inode *dir, struct dentry *dentry)
305 struct nfs_removeargs arg = {
307 .name = dentry->d_name,
309 struct rpc_message msg = {
310 .rpc_proc = &nfs_procedures[NFSPROC_REMOVE],
315 dprintk("NFS call remove %pd2\n",dentry);
316 status = rpc_call_sync(NFS_CLIENT(dir), &msg, 0);
317 nfs_mark_for_revalidate(dir);
319 dprintk("NFS reply remove: %d\n", status);
324 nfs_proc_unlink_setup(struct rpc_message *msg, struct dentry *dentry)
326 msg->rpc_proc = &nfs_procedures[NFSPROC_REMOVE];
329 static void nfs_proc_unlink_rpc_prepare(struct rpc_task *task, struct nfs_unlinkdata *data)
331 rpc_call_start(task);
334 static int nfs_proc_unlink_done(struct rpc_task *task, struct inode *dir)
336 nfs_mark_for_revalidate(dir);
341 nfs_proc_rename_setup(struct rpc_message *msg,
342 struct dentry *old_dentry,
343 struct dentry *new_dentry)
345 msg->rpc_proc = &nfs_procedures[NFSPROC_RENAME];
348 static void nfs_proc_rename_rpc_prepare(struct rpc_task *task, struct nfs_renamedata *data)
350 rpc_call_start(task);
354 nfs_proc_rename_done(struct rpc_task *task, struct inode *old_dir,
355 struct inode *new_dir)
357 nfs_mark_for_revalidate(old_dir);
358 nfs_mark_for_revalidate(new_dir);
363 nfs_proc_link(struct inode *inode, struct inode *dir, const struct qstr *name)
365 struct nfs_linkargs arg = {
366 .fromfh = NFS_FH(inode),
368 .toname = name->name,
371 struct rpc_message msg = {
372 .rpc_proc = &nfs_procedures[NFSPROC_LINK],
377 dprintk("NFS call link %s\n", name->name);
378 status = rpc_call_sync(NFS_CLIENT(inode), &msg, 0);
379 nfs_mark_for_revalidate(inode);
380 nfs_mark_for_revalidate(dir);
381 dprintk("NFS reply link: %d\n", status);
386 nfs_proc_symlink(struct inode *dir, struct dentry *dentry, struct page *page,
387 unsigned int len, struct iattr *sattr)
390 struct nfs_fattr *fattr;
391 struct nfs_symlinkargs arg = {
392 .fromfh = NFS_FH(dir),
393 .fromname = dentry->d_name.name,
394 .fromlen = dentry->d_name.len,
399 struct rpc_message msg = {
400 .rpc_proc = &nfs_procedures[NFSPROC_SYMLINK],
403 int status = -ENAMETOOLONG;
405 dprintk("NFS call symlink %pd\n", dentry);
407 if (len > NFS2_MAXPATHLEN)
410 fh = nfs_alloc_fhandle();
411 fattr = nfs_alloc_fattr();
413 if (fh == NULL || fattr == NULL)
416 status = rpc_call_sync(NFS_CLIENT(dir), &msg, 0);
417 nfs_mark_for_revalidate(dir);
420 * V2 SYMLINK requests don't return any attributes. Setting the
421 * filehandle size to zero indicates to nfs_instantiate that it
422 * should fill in the data with a LOOKUP call on the wire.
425 status = nfs_instantiate(dentry, fh, fattr, NULL);
428 nfs_free_fattr(fattr);
429 nfs_free_fhandle(fh);
431 dprintk("NFS reply symlink: %d\n", status);
436 nfs_proc_mkdir(struct inode *dir, struct dentry *dentry, struct iattr *sattr)
438 struct nfs_createdata *data;
439 struct rpc_message msg = {
440 .rpc_proc = &nfs_procedures[NFSPROC_MKDIR],
442 int status = -ENOMEM;
444 dprintk("NFS call mkdir %pd\n", dentry);
445 data = nfs_alloc_createdata(dir, dentry, sattr);
448 msg.rpc_argp = &data->arg;
449 msg.rpc_resp = &data->res;
451 status = rpc_call_sync(NFS_CLIENT(dir), &msg, 0);
452 nfs_mark_for_revalidate(dir);
454 status = nfs_instantiate(dentry, data->res.fh, data->res.fattr, NULL);
455 nfs_free_createdata(data);
457 dprintk("NFS reply mkdir: %d\n", status);
462 nfs_proc_rmdir(struct inode *dir, const struct qstr *name)
464 struct nfs_diropargs arg = {
469 struct rpc_message msg = {
470 .rpc_proc = &nfs_procedures[NFSPROC_RMDIR],
475 dprintk("NFS call rmdir %s\n", name->name);
476 status = rpc_call_sync(NFS_CLIENT(dir), &msg, 0);
477 nfs_mark_for_revalidate(dir);
478 dprintk("NFS reply rmdir: %d\n", status);
483 * The READDIR implementation is somewhat hackish - we pass a temporary
484 * buffer to the encode function, which installs it in the receive
485 * the receive iovec. The decode function just parses the reply to make
486 * sure it is syntactically correct; the entries itself are decoded
487 * from nfs_readdir by calling the decode_entry function directly.
490 nfs_proc_readdir(struct dentry *dentry, struct rpc_cred *cred,
491 u64 cookie, struct page **pages, unsigned int count, bool plus)
493 struct inode *dir = d_inode(dentry);
494 struct nfs_readdirargs arg = {
500 struct rpc_message msg = {
501 .rpc_proc = &nfs_procedures[NFSPROC_READDIR],
507 dprintk("NFS call readdir %d\n", (unsigned int)cookie);
508 status = rpc_call_sync(NFS_CLIENT(dir), &msg, 0);
510 nfs_invalidate_atime(dir);
512 dprintk("NFS reply readdir: %d\n", status);
517 nfs_proc_statfs(struct nfs_server *server, struct nfs_fh *fhandle,
518 struct nfs_fsstat *stat)
520 struct nfs2_fsstat fsinfo;
521 struct rpc_message msg = {
522 .rpc_proc = &nfs_procedures[NFSPROC_STATFS],
528 dprintk("NFS call statfs\n");
529 nfs_fattr_init(stat->fattr);
530 status = rpc_call_sync(server->client, &msg, 0);
531 dprintk("NFS reply statfs: %d\n", status);
534 stat->tbytes = (u64)fsinfo.blocks * fsinfo.bsize;
535 stat->fbytes = (u64)fsinfo.bfree * fsinfo.bsize;
536 stat->abytes = (u64)fsinfo.bavail * fsinfo.bsize;
545 nfs_proc_fsinfo(struct nfs_server *server, struct nfs_fh *fhandle,
546 struct nfs_fsinfo *info)
548 struct nfs2_fsstat fsinfo;
549 struct rpc_message msg = {
550 .rpc_proc = &nfs_procedures[NFSPROC_STATFS],
556 dprintk("NFS call fsinfo\n");
557 nfs_fattr_init(info->fattr);
558 status = rpc_call_sync(server->client, &msg, 0);
559 dprintk("NFS reply fsinfo: %d\n", status);
562 info->rtmax = NFS_MAXDATA;
563 info->rtpref = fsinfo.tsize;
564 info->rtmult = fsinfo.bsize;
565 info->wtmax = NFS_MAXDATA;
566 info->wtpref = fsinfo.tsize;
567 info->wtmult = fsinfo.bsize;
568 info->dtpref = fsinfo.tsize;
569 info->maxfilesize = 0x7FFFFFFF;
570 info->lease_time = 0;
576 nfs_proc_pathconf(struct nfs_server *server, struct nfs_fh *fhandle,
577 struct nfs_pathconf *info)
580 info->max_namelen = NFS2_MAXNAMLEN;
584 static int nfs_read_done(struct rpc_task *task, struct nfs_pgio_header *hdr)
586 struct inode *inode = hdr->inode;
588 nfs_invalidate_atime(inode);
589 if (task->tk_status >= 0) {
590 nfs_refresh_inode(inode, hdr->res.fattr);
591 /* Emulate the eof flag, which isn't normally needed in NFSv2
592 * as it is guaranteed to always return the file attributes
594 if (hdr->args.offset + hdr->res.count >= hdr->res.fattr->size)
600 static void nfs_proc_read_setup(struct nfs_pgio_header *hdr,
601 struct rpc_message *msg)
603 msg->rpc_proc = &nfs_procedures[NFSPROC_READ];
606 static int nfs_proc_pgio_rpc_prepare(struct rpc_task *task,
607 struct nfs_pgio_header *hdr)
609 rpc_call_start(task);
613 static int nfs_write_done(struct rpc_task *task, struct nfs_pgio_header *hdr)
615 if (task->tk_status >= 0)
616 nfs_writeback_update_inode(hdr);
620 static void nfs_proc_write_setup(struct nfs_pgio_header *hdr,
621 struct rpc_message *msg)
623 /* Note: NFSv2 ignores @stable and always uses NFS_FILE_SYNC */
624 hdr->args.stable = NFS_FILE_SYNC;
625 msg->rpc_proc = &nfs_procedures[NFSPROC_WRITE];
628 static void nfs_proc_commit_rpc_prepare(struct rpc_task *task, struct nfs_commit_data *data)
634 nfs_proc_commit_setup(struct nfs_commit_data *data, struct rpc_message *msg)
640 nfs_proc_lock(struct file *filp, int cmd, struct file_lock *fl)
642 struct inode *inode = file_inode(filp);
644 return nlmclnt_proc(NFS_SERVER(inode)->nlm_host, cmd, fl, NULL);
647 /* Helper functions for NFS lock bounds checking */
648 #define NFS_LOCK32_OFFSET_MAX ((__s32)0x7fffffffUL)
649 static int nfs_lock_check_bounds(const struct file_lock *fl)
653 start = (__s32)fl->fl_start;
654 if ((loff_t)start != fl->fl_start)
657 if (fl->fl_end != OFFSET_MAX) {
658 end = (__s32)fl->fl_end;
659 if ((loff_t)end != fl->fl_end)
662 end = NFS_LOCK32_OFFSET_MAX;
664 if (start < 0 || start > end)
671 static int nfs_have_delegation(struct inode *inode, fmode_t flags)
676 static const struct inode_operations nfs_dir_inode_operations = {
677 .create = nfs_create,
678 .lookup = nfs_lookup,
680 .unlink = nfs_unlink,
681 .symlink = nfs_symlink,
685 .rename = nfs_rename,
686 .permission = nfs_permission,
687 .getattr = nfs_getattr,
688 .setattr = nfs_setattr,
691 static const struct inode_operations nfs_file_inode_operations = {
692 .permission = nfs_permission,
693 .getattr = nfs_getattr,
694 .setattr = nfs_setattr,
697 const struct nfs_rpc_ops nfs_v2_clientops = {
698 .version = 2, /* protocol version */
699 .dentry_ops = &nfs_dentry_operations,
700 .dir_inode_ops = &nfs_dir_inode_operations,
701 .file_inode_ops = &nfs_file_inode_operations,
702 .file_ops = &nfs_file_operations,
703 .getroot = nfs_proc_get_root,
704 .submount = nfs_submount,
705 .try_mount = nfs_try_mount,
706 .getattr = nfs_proc_getattr,
707 .setattr = nfs_proc_setattr,
708 .lookup = nfs_proc_lookup,
709 .access = NULL, /* access */
710 .readlink = nfs_proc_readlink,
711 .create = nfs_proc_create,
712 .remove = nfs_proc_remove,
713 .unlink_setup = nfs_proc_unlink_setup,
714 .unlink_rpc_prepare = nfs_proc_unlink_rpc_prepare,
715 .unlink_done = nfs_proc_unlink_done,
716 .rename_setup = nfs_proc_rename_setup,
717 .rename_rpc_prepare = nfs_proc_rename_rpc_prepare,
718 .rename_done = nfs_proc_rename_done,
719 .link = nfs_proc_link,
720 .symlink = nfs_proc_symlink,
721 .mkdir = nfs_proc_mkdir,
722 .rmdir = nfs_proc_rmdir,
723 .readdir = nfs_proc_readdir,
724 .mknod = nfs_proc_mknod,
725 .statfs = nfs_proc_statfs,
726 .fsinfo = nfs_proc_fsinfo,
727 .pathconf = nfs_proc_pathconf,
728 .decode_dirent = nfs2_decode_dirent,
729 .pgio_rpc_prepare = nfs_proc_pgio_rpc_prepare,
730 .read_setup = nfs_proc_read_setup,
731 .read_done = nfs_read_done,
732 .write_setup = nfs_proc_write_setup,
733 .write_done = nfs_write_done,
734 .commit_setup = nfs_proc_commit_setup,
735 .commit_rpc_prepare = nfs_proc_commit_rpc_prepare,
736 .lock = nfs_proc_lock,
737 .lock_check_bounds = nfs_lock_check_bounds,
738 .close_context = nfs_close_context,
739 .have_delegation = nfs_have_delegation,
740 .alloc_client = nfs_alloc_client,
741 .init_client = nfs_init_client,
742 .free_client = nfs_free_client,
743 .create_server = nfs_create_server,
744 .clone_server = nfs_clone_server,