aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/nfs_xdr.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/nfs_xdr.h')
-rw-r--r--include/linux/nfs_xdr.h94
1 files changed, 70 insertions, 24 deletions
diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h
index 7fafc4c546b..dc5397d9d23 100644
--- a/include/linux/nfs_xdr.h
+++ b/include/linux/nfs_xdr.h
@@ -1,7 +1,6 @@
1#ifndef _LINUX_NFS_XDR_H 1#ifndef _LINUX_NFS_XDR_H
2#define _LINUX_NFS_XDR_H 2#define _LINUX_NFS_XDR_H
3 3
4#include <linux/sunrpc/xprt.h>
5#include <linux/nfsacl.h> 4#include <linux/nfsacl.h>
6 5
7/* 6/*
@@ -14,11 +13,19 @@
14#define NFS_DEF_FILE_IO_SIZE (4096U) 13#define NFS_DEF_FILE_IO_SIZE (4096U)
15#define NFS_MIN_FILE_IO_SIZE (1024U) 14#define NFS_MIN_FILE_IO_SIZE (1024U)
16 15
17struct nfs4_fsid { 16struct nfs_fsid {
18 __u64 major; 17 uint64_t major;
19 __u64 minor; 18 uint64_t minor;
20}; 19};
21 20
21/*
22 * Helper for checking equality between 2 fsids.
23 */
24static inline int nfs_fsid_equal(const struct nfs_fsid *a, const struct nfs_fsid *b)
25{
26 return a->major == b->major && a->minor == b->minor;
27}
28
22struct nfs_fattr { 29struct nfs_fattr {
23 unsigned short valid; /* which fields are valid */ 30 unsigned short valid; /* which fields are valid */
24 __u64 pre_size; /* pre_op_attr.size */ 31 __u64 pre_size; /* pre_op_attr.size */
@@ -40,10 +47,7 @@ struct nfs_fattr {
40 } nfs3; 47 } nfs3;
41 } du; 48 } du;
42 dev_t rdev; 49 dev_t rdev;
43 union { 50 struct nfs_fsid fsid;
44 __u64 nfs3; /* also nfs2 */
45 struct nfs4_fsid nfs4;
46 } fsid_u;
47 __u64 fileid; 51 __u64 fileid;
48 struct timespec atime; 52 struct timespec atime;
49 struct timespec mtime; 53 struct timespec mtime;
@@ -57,8 +61,8 @@ struct nfs_fattr {
57#define NFS_ATTR_WCC 0x0001 /* pre-op WCC data */ 61#define NFS_ATTR_WCC 0x0001 /* pre-op WCC data */
58#define NFS_ATTR_FATTR 0x0002 /* post-op attributes */ 62#define NFS_ATTR_FATTR 0x0002 /* post-op attributes */
59#define NFS_ATTR_FATTR_V3 0x0004 /* NFSv3 attributes */ 63#define NFS_ATTR_FATTR_V3 0x0004 /* NFSv3 attributes */
60#define NFS_ATTR_FATTR_V4 0x0008 64#define NFS_ATTR_FATTR_V4 0x0008 /* NFSv4 change attribute */
61#define NFS_ATTR_PRE_CHANGE 0x0010 65#define NFS_ATTR_FATTR_V4_REFERRAL 0x0010 /* NFSv4 referral */
62 66
63/* 67/*
64 * Info on the file system 68 * Info on the file system
@@ -354,8 +358,8 @@ struct nfs_symlinkargs {
354 struct nfs_fh * fromfh; 358 struct nfs_fh * fromfh;
355 const char * fromname; 359 const char * fromname;
356 unsigned int fromlen; 360 unsigned int fromlen;
357 const char * topath; 361 struct page ** pages;
358 unsigned int tolen; 362 unsigned int pathlen;
359 struct iattr * sattr; 363 struct iattr * sattr;
360}; 364};
361 365
@@ -430,8 +434,8 @@ struct nfs3_symlinkargs {
430 struct nfs_fh * fromfh; 434 struct nfs_fh * fromfh;
431 const char * fromname; 435 const char * fromname;
432 unsigned int fromlen; 436 unsigned int fromlen;
433 const char * topath; 437 struct page ** pages;
434 unsigned int tolen; 438 unsigned int pathlen;
435 struct iattr * sattr; 439 struct iattr * sattr;
436}; 440};
437 441
@@ -529,7 +533,10 @@ struct nfs4_accessres {
529struct nfs4_create_arg { 533struct nfs4_create_arg {
530 u32 ftype; 534 u32 ftype;
531 union { 535 union {
532 struct qstr * symlink; /* NF4LNK */ 536 struct {
537 struct page ** pages;
538 unsigned int len;
539 } symlink; /* NF4LNK */
533 struct { 540 struct {
534 u32 specdata1; 541 u32 specdata1;
535 u32 specdata2; 542 u32 specdata2;
@@ -654,7 +661,7 @@ struct nfs4_rename_res {
654struct nfs4_setclientid { 661struct nfs4_setclientid {
655 const nfs4_verifier * sc_verifier; /* request */ 662 const nfs4_verifier * sc_verifier; /* request */
656 unsigned int sc_name_len; 663 unsigned int sc_name_len;
657 char sc_name[32]; /* request */ 664 char sc_name[48]; /* request */
658 u32 sc_prog; /* request */ 665 u32 sc_prog; /* request */
659 unsigned int sc_netid_len; 666 unsigned int sc_netid_len;
660 char sc_netid[4]; /* request */ 667 char sc_netid[4]; /* request */
@@ -675,6 +682,40 @@ struct nfs4_server_caps_res {
675 u32 has_symlinks; 682 u32 has_symlinks;
676}; 683};
677 684
685struct nfs4_string {
686 unsigned int len;
687 char *data;
688};
689
690#define NFS4_PATHNAME_MAXCOMPONENTS 512
691struct nfs4_pathname {
692 unsigned int ncomponents;
693 struct nfs4_string components[NFS4_PATHNAME_MAXCOMPONENTS];
694};
695
696#define NFS4_FS_LOCATION_MAXSERVERS 10
697struct nfs4_fs_location {
698 unsigned int nservers;
699 struct nfs4_string servers[NFS4_FS_LOCATION_MAXSERVERS];
700 struct nfs4_pathname rootpath;
701};
702
703#define NFS4_FS_LOCATIONS_MAXENTRIES 10
704struct nfs4_fs_locations {
705 struct nfs_fattr fattr;
706 const struct nfs_server *server;
707 struct nfs4_pathname fs_path;
708 int nlocations;
709 struct nfs4_fs_location locations[NFS4_FS_LOCATIONS_MAXENTRIES];
710};
711
712struct nfs4_fs_locations_arg {
713 const struct nfs_fh *dir_fh;
714 const struct qstr *name;
715 struct page *page;
716 const u32 *bitmask;
717};
718
678#endif /* CONFIG_NFS_V4 */ 719#endif /* CONFIG_NFS_V4 */
679 720
680struct nfs_page; 721struct nfs_page;
@@ -690,12 +731,13 @@ struct nfs_read_data {
690 struct list_head pages; /* Coalesced read requests */ 731 struct list_head pages; /* Coalesced read requests */
691 struct nfs_page *req; /* multi ops per nfs_page */ 732 struct nfs_page *req; /* multi ops per nfs_page */
692 struct page **pagevec; 733 struct page **pagevec;
734 unsigned int npages; /* Max length of pagevec */
693 struct nfs_readargs args; 735 struct nfs_readargs args;
694 struct nfs_readres res; 736 struct nfs_readres res;
695#ifdef CONFIG_NFS_V4 737#ifdef CONFIG_NFS_V4
696 unsigned long timestamp; /* For lease renewal */ 738 unsigned long timestamp; /* For lease renewal */
697#endif 739#endif
698 struct page *page_array[NFS_PAGEVEC_SIZE + 1]; 740 struct page *page_array[NFS_PAGEVEC_SIZE];
699}; 741};
700 742
701struct nfs_write_data { 743struct nfs_write_data {
@@ -708,12 +750,13 @@ struct nfs_write_data {
708 struct list_head pages; /* Coalesced requests we wish to flush */ 750 struct list_head pages; /* Coalesced requests we wish to flush */
709 struct nfs_page *req; /* multi ops per nfs_page */ 751 struct nfs_page *req; /* multi ops per nfs_page */
710 struct page **pagevec; 752 struct page **pagevec;
753 unsigned int npages; /* Max length of pagevec */
711 struct nfs_writeargs args; /* argument struct */ 754 struct nfs_writeargs args; /* argument struct */
712 struct nfs_writeres res; /* result struct */ 755 struct nfs_writeres res; /* result struct */
713#ifdef CONFIG_NFS_V4 756#ifdef CONFIG_NFS_V4
714 unsigned long timestamp; /* For lease renewal */ 757 unsigned long timestamp; /* For lease renewal */
715#endif 758#endif
716 struct page *page_array[NFS_PAGEVEC_SIZE + 1]; 759 struct page *page_array[NFS_PAGEVEC_SIZE];
717}; 760};
718 761
719struct nfs_access_entry; 762struct nfs_access_entry;
@@ -729,6 +772,9 @@ struct nfs_rpc_ops {
729 772
730 int (*getroot) (struct nfs_server *, struct nfs_fh *, 773 int (*getroot) (struct nfs_server *, struct nfs_fh *,
731 struct nfs_fsinfo *); 774 struct nfs_fsinfo *);
775 int (*lookupfh)(struct nfs_server *, struct nfs_fh *,
776 struct qstr *, struct nfs_fh *,
777 struct nfs_fattr *);
732 int (*getattr) (struct nfs_server *, struct nfs_fh *, 778 int (*getattr) (struct nfs_server *, struct nfs_fh *,
733 struct nfs_fattr *); 779 struct nfs_fattr *);
734 int (*setattr) (struct dentry *, struct nfs_fattr *, 780 int (*setattr) (struct dentry *, struct nfs_fattr *,
@@ -750,9 +796,8 @@ struct nfs_rpc_ops {
750 int (*rename) (struct inode *, struct qstr *, 796 int (*rename) (struct inode *, struct qstr *,
751 struct inode *, struct qstr *); 797 struct inode *, struct qstr *);
752 int (*link) (struct inode *, struct inode *, struct qstr *); 798 int (*link) (struct inode *, struct inode *, struct qstr *);
753 int (*symlink) (struct inode *, struct qstr *, struct qstr *, 799 int (*symlink) (struct inode *, struct dentry *, struct page *,
754 struct iattr *, struct nfs_fh *, 800 unsigned int, struct iattr *);
755 struct nfs_fattr *);
756 int (*mkdir) (struct inode *, struct dentry *, struct iattr *); 801 int (*mkdir) (struct inode *, struct dentry *, struct iattr *);
757 int (*rmdir) (struct inode *, struct qstr *); 802 int (*rmdir) (struct inode *, struct qstr *);
758 int (*readdir) (struct dentry *, struct rpc_cred *, 803 int (*readdir) (struct dentry *, struct rpc_cred *,
@@ -765,6 +810,7 @@ struct nfs_rpc_ops {
765 struct nfs_fsinfo *); 810 struct nfs_fsinfo *);
766 int (*pathconf) (struct nfs_server *, struct nfs_fh *, 811 int (*pathconf) (struct nfs_server *, struct nfs_fh *,
767 struct nfs_pathconf *); 812 struct nfs_pathconf *);
813 int (*set_capabilities)(struct nfs_server *, struct nfs_fh *);
768 u32 * (*decode_dirent)(u32 *, struct nfs_entry *, int plus); 814 u32 * (*decode_dirent)(u32 *, struct nfs_entry *, int plus);
769 void (*read_setup) (struct nfs_read_data *); 815 void (*read_setup) (struct nfs_read_data *);
770 int (*read_done) (struct rpc_task *, struct nfs_read_data *); 816 int (*read_done) (struct rpc_task *, struct nfs_read_data *);
@@ -788,9 +834,9 @@ struct nfs_rpc_ops {
788/* 834/*
789 * Function vectors etc. for the NFS client 835 * Function vectors etc. for the NFS client
790 */ 836 */
791extern struct nfs_rpc_ops nfs_v2_clientops; 837extern const struct nfs_rpc_ops nfs_v2_clientops;
792extern struct nfs_rpc_ops nfs_v3_clientops; 838extern const struct nfs_rpc_ops nfs_v3_clientops;
793extern struct nfs_rpc_ops nfs_v4_clientops; 839extern const struct nfs_rpc_ops nfs_v4_clientops;
794extern struct rpc_version nfs_version2; 840extern struct rpc_version nfs_version2;
795extern struct rpc_version nfs_version3; 841extern struct rpc_version nfs_version3;
796extern struct rpc_version nfs_version4; 842extern struct rpc_version nfs_version4;