Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
nfs_xdr.h
Go to the documentation of this file.
1 #ifndef _LINUX_NFS_XDR_H
2 #define _LINUX_NFS_XDR_H
3 
4 #include <linux/nfsacl.h>
5 #include <linux/sunrpc/gss_api.h>
6 
7 /*
8  * To change the maximum rsize and wsize supported by the NFS client, adjust
9  * NFS_MAX_FILE_IO_SIZE. 64KB is a typical maximum, but some servers can
10  * support a megabyte or more. The default is left at 4096 bytes, which is
11  * reasonable for NFS over UDP.
12  */
13 #define NFS_MAX_FILE_IO_SIZE (1048576U)
14 #define NFS_DEF_FILE_IO_SIZE (4096U)
15 #define NFS_MIN_FILE_IO_SIZE (1024U)
16 
17 /* Forward declaration for NFS v3 */
18 struct nfs4_secinfo_flavors;
19 
20 struct nfs4_string {
21  unsigned int len;
22  char *data;
23 };
24 
25 struct nfs_fsid {
28 };
29 
30 /*
31  * Helper for checking equality between 2 fsids.
32  */
33 static inline int nfs_fsid_equal(const struct nfs_fsid *a, const struct nfs_fsid *b)
34 {
35  return a->major == b->major && a->minor == b->minor;
36 }
37 
45 };
46 
47 struct nfs_fattr {
48  unsigned int valid; /* which fields are valid */
55  union {
56  struct {
59  } nfs2;
60  struct {
62  } nfs3;
63  } du;
64  struct nfs_fsid fsid;
67  struct timespec atime;
68  struct timespec mtime;
69  struct timespec ctime;
70  __u64 change_attr; /* NFSv4 change attribute */
71  __u64 pre_change_attr;/* pre-op NFSv4 change attribute */
72  __u64 pre_size; /* pre_op_attr.size */
73  struct timespec pre_mtime; /* pre_op_attr.mtime */
74  struct timespec pre_ctime; /* pre_op_attr.ctime */
75  unsigned long time_start;
76  unsigned long gencount;
79  struct nfs4_threshold *mdsthreshold; /* pNFS threshold hints */
80 };
81 
82 #define NFS_ATTR_FATTR_TYPE (1U << 0)
83 #define NFS_ATTR_FATTR_MODE (1U << 1)
84 #define NFS_ATTR_FATTR_NLINK (1U << 2)
85 #define NFS_ATTR_FATTR_OWNER (1U << 3)
86 #define NFS_ATTR_FATTR_GROUP (1U << 4)
87 #define NFS_ATTR_FATTR_RDEV (1U << 5)
88 #define NFS_ATTR_FATTR_SIZE (1U << 6)
89 #define NFS_ATTR_FATTR_PRESIZE (1U << 7)
90 #define NFS_ATTR_FATTR_BLOCKS_USED (1U << 8)
91 #define NFS_ATTR_FATTR_SPACE_USED (1U << 9)
92 #define NFS_ATTR_FATTR_FSID (1U << 10)
93 #define NFS_ATTR_FATTR_FILEID (1U << 11)
94 #define NFS_ATTR_FATTR_ATIME (1U << 12)
95 #define NFS_ATTR_FATTR_MTIME (1U << 13)
96 #define NFS_ATTR_FATTR_CTIME (1U << 14)
97 #define NFS_ATTR_FATTR_PREMTIME (1U << 15)
98 #define NFS_ATTR_FATTR_PRECTIME (1U << 16)
99 #define NFS_ATTR_FATTR_CHANGE (1U << 17)
100 #define NFS_ATTR_FATTR_PRECHANGE (1U << 18)
101 #define NFS_ATTR_FATTR_V4_LOCATIONS (1U << 19)
102 #define NFS_ATTR_FATTR_V4_REFERRAL (1U << 20)
103 #define NFS_ATTR_FATTR_MOUNTPOINT (1U << 21)
104 #define NFS_ATTR_FATTR_MOUNTED_ON_FILEID (1U << 22)
105 #define NFS_ATTR_FATTR_OWNER_NAME (1U << 23)
106 #define NFS_ATTR_FATTR_GROUP_NAME (1U << 24)
107 
108 #define NFS_ATTR_FATTR (NFS_ATTR_FATTR_TYPE \
109  | NFS_ATTR_FATTR_MODE \
110  | NFS_ATTR_FATTR_NLINK \
111  | NFS_ATTR_FATTR_OWNER \
112  | NFS_ATTR_FATTR_GROUP \
113  | NFS_ATTR_FATTR_RDEV \
114  | NFS_ATTR_FATTR_SIZE \
115  | NFS_ATTR_FATTR_FSID \
116  | NFS_ATTR_FATTR_FILEID \
117  | NFS_ATTR_FATTR_ATIME \
118  | NFS_ATTR_FATTR_MTIME \
119  | NFS_ATTR_FATTR_CTIME \
120  | NFS_ATTR_FATTR_CHANGE)
121 #define NFS_ATTR_FATTR_V2 (NFS_ATTR_FATTR \
122  | NFS_ATTR_FATTR_BLOCKS_USED)
123 #define NFS_ATTR_FATTR_V3 (NFS_ATTR_FATTR \
124  | NFS_ATTR_FATTR_SPACE_USED)
125 #define NFS_ATTR_FATTR_V4 (NFS_ATTR_FATTR \
126  | NFS_ATTR_FATTR_SPACE_USED)
127 
128 /*
129  * Info on the file system
130  */
131 struct nfs_fsinfo {
132  struct nfs_fattr *fattr; /* Post-op attributes */
133  __u32 rtmax; /* max. read transfer size */
134  __u32 rtpref; /* pref. read transfer size */
135  __u32 rtmult; /* reads should be multiple of this */
136  __u32 wtmax; /* max. write transfer size */
137  __u32 wtpref; /* pref. write transfer size */
138  __u32 wtmult; /* writes should be multiple of this */
139  __u32 dtpref; /* pref. readdir transfer size */
141  struct timespec time_delta; /* server time granularity */
142  __u32 lease_time; /* in seconds */
143  __u32 layouttype; /* supported pnfs layout driver */
144  __u32 blksize; /* preferred pnfs io block size */
145 };
146 
147 struct nfs_fsstat {
148  struct nfs_fattr *fattr; /* Post-op attributes */
149  __u64 tbytes; /* total size in bytes */
150  __u64 fbytes; /* # of free bytes */
151  __u64 abytes; /* # of bytes available to user */
152  __u64 tfiles; /* # of files */
153  __u64 ffiles; /* # of free files */
154  __u64 afiles; /* # of files available to user */
155 };
156 
157 struct nfs2_fsstat {
158  __u32 tsize; /* Server transfer size */
159  __u32 bsize; /* Filesystem block size */
160  __u32 blocks; /* No. of "bsize" blocks on filesystem */
161  __u32 bfree; /* No. of free "bsize" blocks */
162  __u32 bavail; /* No. of available "bsize" blocks */
163 };
164 
165 struct nfs_pathconf {
166  struct nfs_fattr *fattr; /* Post-op attributes */
167  __u32 max_link; /* max # of hard links */
168  __u32 max_namelen; /* max name length */
169 };
170 
175 };
176 
177 struct nfs_seqid;
178 
179 /* nfs41 sessions channel attributes */
186 };
187 
188 /* nfs41 sessions slot seqid */
189 struct nfs4_slot {
191 };
192 
194  struct nfs4_session *sa_session;
197 };
198 
200  struct nfs4_session *sr_session;
201  struct nfs4_slot *sr_slot; /* slot used to send request */
202  int sr_status; /* sequence operation status */
203  unsigned long sr_renewal_time;
205 };
206 
209 };
210 
214 };
215 
216 #define PNFS_LAYOUT_MAXSIZE 4096
217 
219  struct page **pages;
222 };
223 
228 };
229 
235  struct inode *inode;
240 };
241 
249 };
250 
255 };
256 
258  const struct nfs_fh *fh;
261 };
262 
264  struct pnfs_devicelist *devlist;
266 };
267 
269  struct pnfs_device *pdev;
271 };
272 
274  struct pnfs_device *pdev;
276 };
277 
281  struct inode *inode;
282  const u32 *bitmask;
284 };
285 
287  struct nfs_fattr *fattr;
288  const struct nfs_server *server;
290  int status;
291 };
292 
294  struct rpc_task task;
295  struct nfs_fattr fattr;
297  struct rpc_cred *cred;
300 };
301 
303  struct pnfs_layout_hdr *layout;
304  struct inode *inode;
308 };
309 
314 };
315 
319  struct rpc_cred *cred;
320  struct nfs_client *clp;
322 };
323 
327 };
328 
329 /*
330  * Arguments to the open call.
331  */
332 struct nfs_openargs {
333  const struct nfs_fh * fh;
334  struct nfs_seqid * seqid;
340  union {
341  struct {
342  struct iattr * attrs; /* UNCHECKED, GUARDED */
343  nfs4_verifier verifier; /* EXCLUSIVE */
344  };
345  nfs4_stateid delegation; /* CLAIM_DELEGATE_CUR */
346  fmode_t delegation_type; /* CLAIM_PREVIOUS */
347  } u;
348  const struct qstr * name;
349  const struct nfs_server *server; /* Needed for ID mapping */
350  const u32 * bitmask;
351  const u32 * open_bitmap;
354 };
355 
356 struct nfs_openres {
358  struct nfs_fh fh;
361  struct nfs_fattr * f_attr;
362  struct nfs_seqid * seqid;
363  const struct nfs_server *server;
375 };
376 
377 /*
378  * Arguments to the open_confirm call.
379  */
381  const struct nfs_fh * fh;
383  struct nfs_seqid * seqid;
384 };
385 
388  struct nfs_seqid * seqid;
389 };
390 
391 /*
392  * Arguments to the close call.
393  */
395  struct nfs_fh * fh;
397  struct nfs_seqid * seqid;
399  const u32 * bitmask;
401 };
402 
403 struct nfs_closeres {
405  struct nfs_fattr * fattr;
406  struct nfs_seqid * seqid;
407  const struct nfs_server *server;
409 };
410 /*
411  * * Arguments to the lock,lockt, and locku call.
412  * */
413 struct nfs_lowner {
417 };
418 
420  struct nfs_fh * fh;
421  struct file_lock * fl;
422  struct nfs_seqid * lock_seqid;
424  struct nfs_seqid * open_seqid;
427  unsigned char block : 1;
428  unsigned char reclaim : 1;
429  unsigned char new_lock_owner : 1;
431 };
432 
433 struct nfs_lock_res {
435  struct nfs_seqid * lock_seqid;
436  struct nfs_seqid * open_seqid;
438 };
439 
441  struct nfs_fh * fh;
442  struct file_lock * fl;
443  struct nfs_seqid * seqid;
446 };
447 
450  struct nfs_seqid * seqid;
452 };
453 
455  struct nfs_fh * fh;
456  struct file_lock * fl;
459 };
460 
462  struct file_lock * denied; /* LOCK, LOCKT failed */
464 };
465 
468 };
469 
471  const struct nfs_fh *fhandle;
473  const u32 * bitmask;
475 };
476 
478  struct nfs_fattr * fattr;
479  const struct nfs_server *server;
481 };
482 
483 /*
484  * Arguments to the read call.
485  */
486 struct nfs_readargs {
487  struct nfs_fh * fh;
492  unsigned int pgbase;
493  struct page ** pages;
495 };
496 
497 struct nfs_readres {
498  struct nfs_fattr * fattr;
500  int eof;
502 };
503 
504 /*
505  * Arguments to the write call.
506  */
508  struct nfs_fh * fh;
514  unsigned int pgbase;
515  struct page ** pages;
516  const u32 * bitmask;
518 };
519 
521  char data[8];
522 };
523 
527 };
528 
529 struct nfs_writeres {
530  struct nfs_fattr * fattr;
531  struct nfs_writeverf * verf;
533  const struct nfs_server *server;
535 };
536 
537 /*
538  * Arguments to the commit call.
539  */
541  struct nfs_fh *fh;
544  const u32 *bitmask;
546 };
547 
549  struct nfs_fattr *fattr;
551  const struct nfs_server *server;
553 };
554 
555 /*
556  * Common arguments to the unlink call
557  */
559  const struct nfs_fh *fh;
560  struct qstr name;
562 };
563 
565  const struct nfs_server *server;
569 };
570 
571 /*
572  * Common arguments to the rename call
573  */
575  const struct nfs_fh *old_dir;
576  const struct nfs_fh *new_dir;
577  const struct qstr *old_name;
578  const struct qstr *new_name;
580 };
581 
583  const struct nfs_server *server;
589 };
590 
591 /*
592  * Argument struct for decode_entry function
593  */
594 struct nfs_entry {
597  prev_cookie;
598  const char * name;
599  unsigned int len;
600  int eof;
601  struct nfs_fh * fh;
602  struct nfs_fattr * fattr;
603  unsigned char d_type;
604  struct nfs_server * server;
605 };
606 
607 /*
608  * The following types are for NFSv2 only.
609  */
611  struct nfs_fh * fh;
612  struct iattr * sattr;
613 };
614 
616  struct nfs_fh * fh;
617  const char * name;
618  unsigned int len;
619 };
620 
622  struct nfs_fh * fh;
623  const char * name;
624  unsigned int len;
625  struct iattr * sattr;
626 };
627 
629  struct nfs_fh * fh;
631  struct iattr * iap;
632  const struct nfs_server * server; /* Needed for name mapping */
633  const u32 * bitmask;
635 };
636 
638  struct nfs_fh * fh;
639  size_t acl_len;
640  unsigned int acl_pgbase;
641  struct page ** acl_pages;
643 };
644 
647 };
648 
650  struct nfs_fh * fh;
651  size_t acl_len;
652  unsigned int acl_pgbase;
653  struct page ** acl_pages;
655 };
656 
657 /* getxattr ACL interface flags */
658 #define NFS4_ACL_TRUNC 0x0001 /* ACL was truncated */
660  size_t acl_len;
663  struct page * acl_scratch;
665 };
666 
668  struct nfs_fattr * fattr;
669  const struct nfs_server * server;
671 };
672 
673 struct nfs_linkargs {
674  struct nfs_fh * fromfh;
675  struct nfs_fh * tofh;
676  const char * toname;
677  unsigned int tolen;
678 };
679 
681  struct nfs_fh * fromfh;
682  const char * fromname;
683  unsigned int fromlen;
684  struct page ** pages;
685  unsigned int pathlen;
686  struct iattr * sattr;
687 };
688 
690  struct nfs_fh * fh;
692  unsigned int count;
693  struct page ** pages;
694 };
695 
697  struct nfs_fh * fh;
698  int mask;
699  struct page ** pages;
700 };
701 
703  struct inode * inode;
704  int mask;
707  size_t len;
708  unsigned int npages;
709  struct page ** pages;
710 };
711 
712 struct nfs_diropok {
713  struct nfs_fh * fh;
714  struct nfs_fattr * fattr;
715 };
716 
718  struct nfs_fh * fh;
719  unsigned int pgbase;
720  unsigned int pglen;
721  struct page ** pages;
722 };
723 
725  struct nfs_fh * fh;
726  struct iattr * sattr;
727  unsigned int guard;
729 };
730 
732  struct nfs_fh * fh;
733  const char * name;
734  unsigned int len;
735 };
736 
738  struct nfs_fh * fh;
740 };
741 
743  struct nfs_fh * fh;
744  const char * name;
745  unsigned int len;
746  struct iattr * sattr;
749 };
750 
752  struct nfs_fh * fh;
753  const char * name;
754  unsigned int len;
755  struct iattr * sattr;
756 };
757 
759  struct nfs_fh * fromfh;
760  const char * fromname;
761  unsigned int fromlen;
762  struct page ** pages;
763  unsigned int pathlen;
764  struct iattr * sattr;
765 };
766 
768  struct nfs_fh * fh;
769  const char * name;
770  unsigned int len;
772  struct iattr * sattr;
774 };
775 
777  struct nfs_fh * fromfh;
778  struct nfs_fh * tofh;
779  const char * toname;
780  unsigned int tolen;
781 };
782 
784  struct nfs_fh * fh;
787  int plus;
788  unsigned int count;
789  struct page ** pages;
790 };
791 
793  struct nfs_fattr * dir_attr;
794  struct nfs_fh * fh;
795  struct nfs_fattr * fattr;
796 };
797 
799  struct nfs_fattr * fattr;
801 };
802 
804  struct nfs_fh * fh;
805  unsigned int pgbase;
806  unsigned int pglen;
807  struct page ** pages;
808 };
809 
810 struct nfs3_linkres {
811  struct nfs_fattr * dir_attr;
812  struct nfs_fattr * fattr;
813 };
814 
816  struct nfs_fattr * dir_attr;
818  int plus;
819 };
820 
822  struct nfs_fattr * fattr;
823  int mask;
824  unsigned int acl_access_count;
825  unsigned int acl_default_count;
828 };
829 
830 #if IS_ENABLED(CONFIG_NFS_V4)
831 
832 typedef u64 clientid4;
833 
834 struct nfs4_accessargs {
835  const struct nfs_fh * fh;
836  const u32 * bitmask;
837  u32 access;
838  struct nfs4_sequence_args seq_args;
839 };
840 
841 struct nfs4_accessres {
842  const struct nfs_server * server;
843  struct nfs_fattr * fattr;
844  u32 supported;
845  u32 access;
846  struct nfs4_sequence_res seq_res;
847 };
848 
849 struct nfs4_create_arg {
850  u32 ftype;
851  union {
852  struct {
853  struct page ** pages;
854  unsigned int len;
855  } symlink; /* NF4LNK */
856  struct {
857  u32 specdata1;
858  u32 specdata2;
859  } device; /* NF4BLK, NF4CHR */
860  } u;
861  const struct qstr * name;
862  const struct nfs_server * server;
863  const struct iattr * attrs;
864  const struct nfs_fh * dir_fh;
865  const u32 * bitmask;
866  struct nfs4_sequence_args seq_args;
867 };
868 
869 struct nfs4_create_res {
870  const struct nfs_server * server;
871  struct nfs_fh * fh;
872  struct nfs_fattr * fattr;
873  struct nfs4_change_info dir_cinfo;
874  struct nfs4_sequence_res seq_res;
875 };
876 
877 struct nfs4_fsinfo_arg {
878  const struct nfs_fh * fh;
879  const u32 * bitmask;
880  struct nfs4_sequence_args seq_args;
881 };
882 
883 struct nfs4_fsinfo_res {
884  struct nfs_fsinfo *fsinfo;
885  struct nfs4_sequence_res seq_res;
886 };
887 
888 struct nfs4_getattr_arg {
889  const struct nfs_fh * fh;
890  const u32 * bitmask;
891  struct nfs4_sequence_args seq_args;
892 };
893 
894 struct nfs4_getattr_res {
895  const struct nfs_server * server;
896  struct nfs_fattr * fattr;
897  struct nfs4_sequence_res seq_res;
898 };
899 
900 struct nfs4_link_arg {
901  const struct nfs_fh * fh;
902  const struct nfs_fh * dir_fh;
903  const struct qstr * name;
904  const u32 * bitmask;
905  struct nfs4_sequence_args seq_args;
906 };
907 
908 struct nfs4_link_res {
909  const struct nfs_server * server;
910  struct nfs_fattr * fattr;
911  struct nfs4_change_info cinfo;
912  struct nfs_fattr * dir_attr;
913  struct nfs4_sequence_res seq_res;
914 };
915 
916 
917 struct nfs4_lookup_arg {
918  const struct nfs_fh * dir_fh;
919  const struct qstr * name;
920  const u32 * bitmask;
921  struct nfs4_sequence_args seq_args;
922 };
923 
924 struct nfs4_lookup_res {
925  const struct nfs_server * server;
926  struct nfs_fattr * fattr;
927  struct nfs_fh * fh;
928  struct nfs4_sequence_res seq_res;
929 };
930 
931 struct nfs4_lookup_root_arg {
932  const u32 * bitmask;
933  struct nfs4_sequence_args seq_args;
934 };
935 
936 struct nfs4_pathconf_arg {
937  const struct nfs_fh * fh;
938  const u32 * bitmask;
939  struct nfs4_sequence_args seq_args;
940 };
941 
942 struct nfs4_pathconf_res {
943  struct nfs_pathconf *pathconf;
944  struct nfs4_sequence_res seq_res;
945 };
946 
947 struct nfs4_readdir_arg {
948  const struct nfs_fh * fh;
949  u64 cookie;
950  nfs4_verifier verifier;
951  u32 count;
952  struct page ** pages; /* zero-copy data */
953  unsigned int pgbase; /* zero-copy data */
954  const u32 * bitmask;
955  int plus;
956  struct nfs4_sequence_args seq_args;
957 };
958 
959 struct nfs4_readdir_res {
960  nfs4_verifier verifier;
961  unsigned int pgbase;
962  struct nfs4_sequence_res seq_res;
963 };
964 
965 struct nfs4_readlink {
966  const struct nfs_fh * fh;
967  unsigned int pgbase;
968  unsigned int pglen; /* zero-copy data */
969  struct page ** pages; /* zero-copy data */
970  struct nfs4_sequence_args seq_args;
971 };
972 
973 struct nfs4_readlink_res {
974  struct nfs4_sequence_res seq_res;
975 };
976 
977 #define NFS4_SETCLIENTID_NAMELEN (127)
978 struct nfs4_setclientid {
979  const nfs4_verifier * sc_verifier;
980  unsigned int sc_name_len;
981  char sc_name[NFS4_SETCLIENTID_NAMELEN + 1];
982  u32 sc_prog;
983  unsigned int sc_netid_len;
984  char sc_netid[RPCBIND_MAXNETIDLEN + 1];
985  unsigned int sc_uaddr_len;
986  char sc_uaddr[RPCBIND_MAXUADDRLEN + 1];
987  u32 sc_cb_ident;
988 };
989 
990 struct nfs4_setclientid_res {
991  u64 clientid;
993 };
994 
995 struct nfs4_statfs_arg {
996  const struct nfs_fh * fh;
997  const u32 * bitmask;
998  struct nfs4_sequence_args seq_args;
999 };
1000 
1001 struct nfs4_statfs_res {
1002  struct nfs_fsstat *fsstat;
1003  struct nfs4_sequence_res seq_res;
1004 };
1005 
1006 struct nfs4_server_caps_arg {
1007  struct nfs_fh *fhandle;
1008  struct nfs4_sequence_args seq_args;
1009 };
1010 
1011 struct nfs4_server_caps_res {
1012  u32 attr_bitmask[3];
1013  u32 acl_bitmask;
1014  u32 has_links;
1015  u32 has_symlinks;
1016  u32 fh_expire_type;
1017  struct nfs4_sequence_res seq_res;
1018 };
1019 
1020 #define NFS4_PATHNAME_MAXCOMPONENTS 512
1021 struct nfs4_pathname {
1022  unsigned int ncomponents;
1023  struct nfs4_string components[NFS4_PATHNAME_MAXCOMPONENTS];
1024 };
1025 
1026 #define NFS4_FS_LOCATION_MAXSERVERS 10
1027 struct nfs4_fs_location {
1028  unsigned int nservers;
1029  struct nfs4_string servers[NFS4_FS_LOCATION_MAXSERVERS];
1030  struct nfs4_pathname rootpath;
1031 };
1032 
1033 #define NFS4_FS_LOCATIONS_MAXENTRIES 10
1034 struct nfs4_fs_locations {
1035  struct nfs_fattr fattr;
1036  const struct nfs_server *server;
1037  struct nfs4_pathname fs_path;
1038  int nlocations;
1039  struct nfs4_fs_location locations[NFS4_FS_LOCATIONS_MAXENTRIES];
1040 };
1041 
1042 struct nfs4_fs_locations_arg {
1043  const struct nfs_fh *dir_fh;
1044  const struct qstr *name;
1045  struct page *page;
1046  const u32 *bitmask;
1047  struct nfs4_sequence_args seq_args;
1048 };
1049 
1050 struct nfs4_fs_locations_res {
1051  struct nfs4_fs_locations *fs_locations;
1052  struct nfs4_sequence_res seq_res;
1053 };
1054 
1055 struct nfs4_secinfo_oid {
1056  unsigned int len;
1057  char data[GSS_OID_MAX_LEN];
1058 };
1059 
1060 struct nfs4_secinfo_gss {
1061  struct nfs4_secinfo_oid sec_oid4;
1062  unsigned int qop4;
1063  unsigned int service;
1064 };
1065 
1066 struct nfs4_secinfo_flavor {
1067  unsigned int flavor;
1068  struct nfs4_secinfo_gss gss;
1069 };
1070 
1071 struct nfs4_secinfo_flavors {
1072  unsigned int num_flavors;
1073  struct nfs4_secinfo_flavor flavors[0];
1074 };
1075 
1076 struct nfs4_secinfo_arg {
1077  const struct nfs_fh *dir_fh;
1078  const struct qstr *name;
1079  struct nfs4_sequence_args seq_args;
1080 };
1081 
1082 struct nfs4_secinfo_res {
1083  struct nfs4_secinfo_flavors *flavors;
1084  struct nfs4_sequence_res seq_res;
1085 };
1086 
1087 #endif /* CONFIG_NFS_V4 */
1088 
1089 struct nfstime4 {
1092 };
1093 
1094 #ifdef CONFIG_NFS_V4_1
1095 
1096 struct pnfs_commit_bucket {
1097  struct list_head written;
1098  struct list_head committing;
1099  struct pnfs_layout_segment *wlseg;
1100  struct pnfs_layout_segment *clseg;
1101 };
1102 
1103 struct pnfs_ds_commit_info {
1104  int nwritten;
1105  int ncommitting;
1106  int nbuckets;
1107  struct pnfs_commit_bucket *buckets;
1108 };
1109 
1110 #define NFS4_EXCHANGE_ID_LEN (48)
1111 struct nfs41_exchange_id_args {
1112  struct nfs_client *client;
1113  nfs4_verifier *verifier;
1114  unsigned int id_len;
1115  char id[NFS4_EXCHANGE_ID_LEN];
1116  u32 flags;
1117 };
1118 
1119 struct nfs41_server_owner {
1120  uint64_t minor_id;
1121  uint32_t major_id_sz;
1122  char major_id[NFS4_OPAQUE_LIMIT];
1123 };
1124 
1125 struct nfs41_server_scope {
1126  uint32_t server_scope_sz;
1127  char server_scope[NFS4_OPAQUE_LIMIT];
1128 };
1129 
1130 struct nfs41_impl_id {
1131  char domain[NFS4_OPAQUE_LIMIT + 1];
1132  char name[NFS4_OPAQUE_LIMIT + 1];
1133  struct nfstime4 date;
1134 };
1135 
1136 struct nfs41_bind_conn_to_session_res {
1137  struct nfs4_session *session;
1138  u32 dir;
1139  bool use_conn_in_rdma_mode;
1140 };
1141 
1142 struct nfs41_exchange_id_res {
1143  u64 clientid;
1144  u32 seqid;
1145  u32 flags;
1146  struct nfs41_server_owner *server_owner;
1147  struct nfs41_server_scope *server_scope;
1148  struct nfs41_impl_id *impl_id;
1149 };
1150 
1151 struct nfs41_create_session_args {
1152  struct nfs_client *client;
1153  uint32_t flags;
1154  uint32_t cb_program;
1155  struct nfs4_channel_attrs fc_attrs; /* Fore Channel */
1156  struct nfs4_channel_attrs bc_attrs; /* Back Channel */
1157 };
1158 
1159 struct nfs41_create_session_res {
1160  struct nfs_client *client;
1161 };
1162 
1163 struct nfs41_reclaim_complete_args {
1164  /* In the future extend to include curr_fh for use with migration */
1165  unsigned char one_fs:1;
1166  struct nfs4_sequence_args seq_args;
1167 };
1168 
1169 struct nfs41_reclaim_complete_res {
1170  struct nfs4_sequence_res seq_res;
1171 };
1172 
1173 #define SECINFO_STYLE_CURRENT_FH 0
1174 #define SECINFO_STYLE_PARENT 1
1175 struct nfs41_secinfo_no_name_args {
1176  int style;
1177  struct nfs4_sequence_args seq_args;
1178 };
1179 
1180 struct nfs41_test_stateid_args {
1181  nfs4_stateid *stateid;
1182  struct nfs4_sequence_args seq_args;
1183 };
1184 
1185 struct nfs41_test_stateid_res {
1186  unsigned int status;
1187  struct nfs4_sequence_res seq_res;
1188 };
1189 
1190 struct nfs41_free_stateid_args {
1191  nfs4_stateid *stateid;
1192  struct nfs4_sequence_args seq_args;
1193 };
1194 
1195 struct nfs41_free_stateid_res {
1196  unsigned int status;
1197  struct nfs4_sequence_res seq_res;
1198 };
1199 
1200 #else
1201 
1203 };
1204 
1205 #endif /* CONFIG_NFS_V4_1 */
1206 
1207 struct nfs_page;
1208 
1209 #define NFS_PAGEVEC_SIZE (8U)
1210 
1212  struct page **pagevec;
1213  unsigned int npages; /* Max length of pagevec */
1215 };
1216 
1219  struct list_head list;
1220  struct rpc_task task;
1221  struct nfs_fattr fattr; /* fattr storage */
1224  unsigned long timestamp; /* For lease renewal */
1228  struct nfs_client *ds_clp; /* pNFS data server */
1229 };
1230 
1231 /* used as flag bits in nfs_pgio_header */
1232 enum {
1238 };
1239 
1241  struct inode *inode;
1242  struct rpc_cred *cred;
1246  struct nfs_page *req;
1249  loff_t io_start;
1250  const struct rpc_call_ops *mds_ops;
1256  /* fields protected by lock */
1258  int error; /* merge with pnfs_error */
1259  unsigned long good_bytes; /* boundary of good data */
1260  unsigned long flags;
1261 };
1262 
1266 };
1267 
1270  struct list_head list;
1271  struct rpc_task task;
1274  struct nfs_writeargs args; /* argument struct */
1275  struct nfs_writeres res; /* result struct */
1276  unsigned long timestamp; /* For lease renewal */
1278  __u64 mds_offset; /* Filelayout dense stripe */
1280  struct nfs_client *ds_clp; /* pNFS data server */
1281 };
1282 
1287 };
1288 
1291  unsigned long ncommit;
1292  struct list_head list;
1293 };
1294 
1295 struct nfs_commit_data;
1296 struct nfs_inode;
1298  void (*error_cleanup) (struct nfs_inode *nfsi);
1300 };
1301 
1306  struct nfs_direct_req *dreq; /* O_DIRECT request */
1308 };
1309 
1311  struct rpc_task task;
1312  struct inode *inode;
1313  struct rpc_cred *cred;
1316  struct list_head pages; /* Coalesced requests we wish to flush */
1317  struct list_head list; /* lists of struct nfs_write_data */
1318  struct nfs_direct_req *dreq; /* O_DIRECT request */
1319  struct nfs_commitargs args; /* argument struct */
1320  struct nfs_commitres res; /* result struct */
1323  struct nfs_client *ds_clp; /* pNFS data server */
1325  const struct rpc_call_ops *mds_ops;
1328 };
1329 
1334 };
1335 
1340  struct inode *dir;
1341  struct rpc_cred *cred;
1343 };
1344 
1348  struct rpc_cred *cred;
1349  struct inode *old_dir;
1352  struct inode *new_dir;
1355 };
1356 
1357 struct nfs_access_entry;
1358 struct nfs_client;
1359 struct rpc_timeout;
1360 struct nfs_subversion;
1361 struct nfs_mount_info;
1362 struct nfs_client_initdata;
1363 struct nfs_pageio_descriptor;
1364 
1365 /*
1366  * RPC procedure vector for NFSv2/NFSv3 demuxing
1367  */
1368 struct nfs_rpc_ops {
1369  u32 version; /* Protocol version */
1373  const struct file_operations *file_ops;
1374 
1375  int (*getroot) (struct nfs_server *, struct nfs_fh *,
1376  struct nfs_fsinfo *);
1377  struct vfsmount *(*submount) (struct nfs_server *, struct dentry *,
1378  struct nfs_fh *, struct nfs_fattr *);
1379  struct dentry *(*try_mount) (int, const char *, struct nfs_mount_info *,
1380  struct nfs_subversion *);
1381  int (*getattr) (struct nfs_server *, struct nfs_fh *,
1382  struct nfs_fattr *);
1383  int (*setattr) (struct dentry *, struct nfs_fattr *,
1384  struct iattr *);
1385  int (*lookup) (struct inode *, struct qstr *,
1386  struct nfs_fh *, struct nfs_fattr *);
1387  int (*access) (struct inode *, struct nfs_access_entry *);
1388  int (*readlink)(struct inode *, struct page *, unsigned int,
1389  unsigned int);
1390  int (*create) (struct inode *, struct dentry *,
1391  struct iattr *, int);
1392  int (*remove) (struct inode *, struct qstr *);
1393  void (*unlink_setup) (struct rpc_message *, struct inode *dir);
1395  int (*unlink_done) (struct rpc_task *, struct inode *);
1396  int (*rename) (struct inode *, struct qstr *,
1397  struct inode *, struct qstr *);
1398  void (*rename_setup) (struct rpc_message *msg, struct inode *dir);
1400  int (*rename_done) (struct rpc_task *task, struct inode *old_dir, struct inode *new_dir);
1401  int (*link) (struct inode *, struct inode *, struct qstr *);
1402  int (*symlink) (struct inode *, struct dentry *, struct page *,
1403  unsigned int, struct iattr *);
1404  int (*mkdir) (struct inode *, struct dentry *, struct iattr *);
1405  int (*rmdir) (struct inode *, struct qstr *);
1406  int (*readdir) (struct dentry *, struct rpc_cred *,
1407  u64, struct page **, unsigned int, int);
1408  int (*mknod) (struct inode *, struct dentry *, struct iattr *,
1409  dev_t);
1410  int (*statfs) (struct nfs_server *, struct nfs_fh *,
1411  struct nfs_fsstat *);
1412  int (*fsinfo) (struct nfs_server *, struct nfs_fh *,
1413  struct nfs_fsinfo *);
1414  int (*pathconf) (struct nfs_server *, struct nfs_fh *,
1415  struct nfs_pathconf *);
1416  int (*set_capabilities)(struct nfs_server *, struct nfs_fh *);
1417  int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, int);
1418  void (*read_setup) (struct nfs_read_data *, struct rpc_message *);
1420  const struct nfs_pgio_completion_ops *);
1422  int (*read_done) (struct rpc_task *, struct nfs_read_data *);
1423  void (*write_setup) (struct nfs_write_data *, struct rpc_message *);
1425  const struct nfs_pgio_completion_ops *);
1427  int (*write_done) (struct rpc_task *, struct nfs_write_data *);
1430  int (*commit_done) (struct rpc_task *, struct nfs_commit_data *);
1431  int (*lock)(struct file *, int, struct file_lock *);
1432  int (*lock_check_bounds)(const struct file_lock *);
1435  struct inode * (*open_context) (struct inode *dir,
1436  struct nfs_open_context *ctx,
1437  int open_flags,
1438  struct iattr *iattr);
1441  struct nfs_client *(*alloc_client) (const struct nfs_client_initdata *);
1442  struct nfs_client *
1443  (*init_client) (struct nfs_client *, const struct rpc_timeout *,
1444  const char *, rpc_authflavor_t);
1445  void (*free_client) (struct nfs_client *);
1446  struct nfs_server *(*create_server)(struct nfs_mount_info *, struct nfs_subversion *);
1447  struct nfs_server *(*clone_server)(struct nfs_server *, struct nfs_fh *,
1448  struct nfs_fattr *, rpc_authflavor_t);
1449 };
1450 
1451 /*
1452  * NFS_CALL(getattr, inode, (fattr));
1453  * into
1454  * NFS_PROTO(inode)->getattr(fattr);
1455  */
1456 #define NFS_CALL(op, inode, args) NFS_PROTO(inode)->op args
1457 
1458 /*
1459  * Function vectors etc. for the NFS client
1460  */
1461 extern const struct nfs_rpc_ops nfs_v2_clientops;
1462 extern const struct nfs_rpc_ops nfs_v3_clientops;
1463 extern const struct nfs_rpc_ops nfs_v4_clientops;
1464 extern const struct rpc_version nfs_version2;
1465 extern const struct rpc_version nfs_version3;
1466 extern const struct rpc_version nfs_version4;
1467 
1468 extern const struct rpc_version nfsacl_version3;
1469 extern const struct rpc_program nfsacl_program;
1470 
1471 #endif