aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/linux/nfs4.h62
-rw-r--r--include/linux/nfs_fs.h5
-rw-r--r--include/linux/nfs_fs_sb.h3
-rw-r--r--include/linux/nfs_xdr.h50
-rw-r--r--include/linux/sunrpc/xdr.h7
5 files changed, 125 insertions, 2 deletions
diff --git a/include/linux/nfs4.h b/include/linux/nfs4.h
index 07e40c625972..a9683d6acaa4 100644
--- a/include/linux/nfs4.h
+++ b/include/linux/nfs4.h
@@ -17,7 +17,9 @@
17 17
18#define NFS4_BITMAP_SIZE 2 18#define NFS4_BITMAP_SIZE 2
19#define NFS4_VERIFIER_SIZE 8 19#define NFS4_VERIFIER_SIZE 8
20#define NFS4_STATEID_SIZE 16 20#define NFS4_STATEID_SEQID_SIZE 4
21#define NFS4_STATEID_OTHER_SIZE 12
22#define NFS4_STATEID_SIZE (NFS4_STATEID_SEQID_SIZE + NFS4_STATEID_OTHER_SIZE)
21#define NFS4_FHSIZE 128 23#define NFS4_FHSIZE 128
22#define NFS4_MAXPATHLEN PATH_MAX 24#define NFS4_MAXPATHLEN PATH_MAX
23#define NFS4_MAXNAMLEN NAME_MAX 25#define NFS4_MAXNAMLEN NAME_MAX
@@ -167,7 +169,16 @@ struct nfs4_acl {
167}; 169};
168 170
169typedef struct { char data[NFS4_VERIFIER_SIZE]; } nfs4_verifier; 171typedef struct { char data[NFS4_VERIFIER_SIZE]; } nfs4_verifier;
170typedef struct { char data[NFS4_STATEID_SIZE]; } nfs4_stateid; 172
173struct nfs41_stateid {
174 __be32 seqid;
175 char other[NFS4_STATEID_OTHER_SIZE];
176} __attribute__ ((packed));
177
178typedef union {
179 char data[NFS4_STATEID_SIZE];
180 struct nfs41_stateid stateid;
181} nfs4_stateid;
171 182
172enum nfs_opnum4 { 183enum nfs_opnum4 {
173 OP_ACCESS = 3, 184 OP_ACCESS = 3,
@@ -471,6 +482,8 @@ enum lock_type4 {
471#define FATTR4_WORD1_TIME_MODIFY (1UL << 21) 482#define FATTR4_WORD1_TIME_MODIFY (1UL << 21)
472#define FATTR4_WORD1_TIME_MODIFY_SET (1UL << 22) 483#define FATTR4_WORD1_TIME_MODIFY_SET (1UL << 22)
473#define FATTR4_WORD1_MOUNTED_ON_FILEID (1UL << 23) 484#define FATTR4_WORD1_MOUNTED_ON_FILEID (1UL << 23)
485#define FATTR4_WORD1_FS_LAYOUT_TYPES (1UL << 30)
486#define FATTR4_WORD2_LAYOUT_BLKSIZE (1UL << 1)
474 487
475#define NFSPROC4_NULL 0 488#define NFSPROC4_NULL 0
476#define NFSPROC4_COMPOUND 1 489#define NFSPROC4_COMPOUND 1
@@ -532,6 +545,8 @@ enum {
532 NFSPROC4_CLNT_SEQUENCE, 545 NFSPROC4_CLNT_SEQUENCE,
533 NFSPROC4_CLNT_GET_LEASE_TIME, 546 NFSPROC4_CLNT_GET_LEASE_TIME,
534 NFSPROC4_CLNT_RECLAIM_COMPLETE, 547 NFSPROC4_CLNT_RECLAIM_COMPLETE,
548 NFSPROC4_CLNT_LAYOUTGET,
549 NFSPROC4_CLNT_GETDEVICEINFO,
535}; 550};
536 551
537/* nfs41 types */ 552/* nfs41 types */
@@ -550,6 +565,49 @@ enum state_protect_how4 {
550 SP4_SSV = 2 565 SP4_SSV = 2
551}; 566};
552 567
568enum pnfs_layouttype {
569 LAYOUT_NFSV4_1_FILES = 1,
570 LAYOUT_OSD2_OBJECTS = 2,
571 LAYOUT_BLOCK_VOLUME = 3,
572};
573
574/* used for both layout return and recall */
575enum pnfs_layoutreturn_type {
576 RETURN_FILE = 1,
577 RETURN_FSID = 2,
578 RETURN_ALL = 3
579};
580
581enum pnfs_iomode {
582 IOMODE_READ = 1,
583 IOMODE_RW = 2,
584 IOMODE_ANY = 3,
585};
586
587enum pnfs_notify_deviceid_type4 {
588 NOTIFY_DEVICEID4_CHANGE = 1 << 1,
589 NOTIFY_DEVICEID4_DELETE = 1 << 2,
590};
591
592#define NFL4_UFLG_MASK 0x0000003F
593#define NFL4_UFLG_DENSE 0x00000001
594#define NFL4_UFLG_COMMIT_THRU_MDS 0x00000002
595#define NFL4_UFLG_STRIPE_UNIT_SIZE_MASK 0xFFFFFFC0
596
597/* Encoded in the loh_body field of type layouthint4 */
598enum filelayout_hint_care4 {
599 NFLH4_CARE_DENSE = NFL4_UFLG_DENSE,
600 NFLH4_CARE_COMMIT_THRU_MDS = NFL4_UFLG_COMMIT_THRU_MDS,
601 NFLH4_CARE_STRIPE_UNIT_SIZE = 0x00000040,
602 NFLH4_CARE_STRIPE_COUNT = 0x00000080
603};
604
605#define NFS4_DEVICEID4_SIZE 16
606
607struct nfs4_deviceid {
608 char data[NFS4_DEVICEID4_SIZE];
609};
610
553#endif 611#endif
554#endif 612#endif
555 613
diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h
index a46e430d9622..bba26684acdc 100644
--- a/include/linux/nfs_fs.h
+++ b/include/linux/nfs_fs.h
@@ -188,6 +188,9 @@ struct nfs_inode {
188 struct nfs_delegation __rcu *delegation; 188 struct nfs_delegation __rcu *delegation;
189 fmode_t delegation_state; 189 fmode_t delegation_state;
190 struct rw_semaphore rwsem; 190 struct rw_semaphore rwsem;
191
192 /* pNFS layout information */
193 struct pnfs_layout_hdr *layout;
191#endif /* CONFIG_NFS_V4*/ 194#endif /* CONFIG_NFS_V4*/
192#ifdef CONFIG_NFS_FSCACHE 195#ifdef CONFIG_NFS_FSCACHE
193 struct fscache_cookie *fscache; 196 struct fscache_cookie *fscache;
@@ -615,6 +618,8 @@ nfs_fileid_to_ino_t(u64 fileid)
615#define NFSDBG_CLIENT 0x0200 618#define NFSDBG_CLIENT 0x0200
616#define NFSDBG_MOUNT 0x0400 619#define NFSDBG_MOUNT 0x0400
617#define NFSDBG_FSCACHE 0x0800 620#define NFSDBG_FSCACHE 0x0800
621#define NFSDBG_PNFS 0x1000
622#define NFSDBG_PNFS_LD 0x2000
618#define NFSDBG_ALL 0xFFFF 623#define NFSDBG_ALL 0xFFFF
619 624
620#ifdef __KERNEL__ 625#ifdef __KERNEL__
diff --git a/include/linux/nfs_fs_sb.h b/include/linux/nfs_fs_sb.h
index 5eef862ec187..452d96436d26 100644
--- a/include/linux/nfs_fs_sb.h
+++ b/include/linux/nfs_fs_sb.h
@@ -82,6 +82,8 @@ struct nfs_client {
82 /* The flags used for obtaining the clientid during EXCHANGE_ID */ 82 /* The flags used for obtaining the clientid during EXCHANGE_ID */
83 u32 cl_exchange_flags; 83 u32 cl_exchange_flags;
84 struct nfs4_session *cl_session; /* sharred session */ 84 struct nfs4_session *cl_session; /* sharred session */
85 struct list_head cl_layouts;
86 struct pnfs_deviceid_cache *cl_devid_cache; /* pNFS deviceid cache */
85#endif /* CONFIG_NFS_V4_1 */ 87#endif /* CONFIG_NFS_V4_1 */
86 88
87#ifdef CONFIG_NFS_FSCACHE 89#ifdef CONFIG_NFS_FSCACHE
@@ -145,6 +147,7 @@ struct nfs_server {
145 u32 acl_bitmask; /* V4 bitmask representing the ACEs 147 u32 acl_bitmask; /* V4 bitmask representing the ACEs
146 that are supported on this 148 that are supported on this
147 filesystem */ 149 filesystem */
150 struct pnfs_layoutdriver_type *pnfs_curr_ld; /* Active layout driver */
148#endif 151#endif
149 void (*destroy)(struct nfs_server *); 152 void (*destroy)(struct nfs_server *);
150 153
diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h
index da7a1300dc60..ba6cc8f223c9 100644
--- a/include/linux/nfs_xdr.h
+++ b/include/linux/nfs_xdr.h
@@ -114,6 +114,7 @@ struct nfs_fsinfo {
114 __u64 maxfilesize; 114 __u64 maxfilesize;
115 struct timespec time_delta; /* server time granularity */ 115 struct timespec time_delta; /* server time granularity */
116 __u32 lease_time; /* in seconds */ 116 __u32 lease_time; /* in seconds */
117 __u32 layouttype; /* supported pnfs layout driver */
117}; 118};
118 119
119struct nfs_fsstat { 120struct nfs_fsstat {
@@ -186,6 +187,55 @@ struct nfs4_get_lease_time_res {
186 struct nfs4_sequence_res lr_seq_res; 187 struct nfs4_sequence_res lr_seq_res;
187}; 188};
188 189
190#define PNFS_LAYOUT_MAXSIZE 4096
191
192struct nfs4_layoutdriver_data {
193 __u32 len;
194 void *buf;
195};
196
197struct pnfs_layout_range {
198 u32 iomode;
199 u64 offset;
200 u64 length;
201};
202
203struct nfs4_layoutget_args {
204 __u32 type;
205 struct pnfs_layout_range range;
206 __u64 minlength;
207 __u32 maxcount;
208 struct inode *inode;
209 struct nfs_open_context *ctx;
210 struct nfs4_sequence_args seq_args;
211};
212
213struct nfs4_layoutget_res {
214 __u32 return_on_close;
215 struct pnfs_layout_range range;
216 __u32 type;
217 nfs4_stateid stateid;
218 struct nfs4_layoutdriver_data layout;
219 struct nfs4_sequence_res seq_res;
220};
221
222struct nfs4_layoutget {
223 struct nfs4_layoutget_args args;
224 struct nfs4_layoutget_res res;
225 struct pnfs_layout_segment **lsegpp;
226 int status;
227};
228
229struct nfs4_getdeviceinfo_args {
230 struct pnfs_device *pdev;
231 struct nfs4_sequence_args seq_args;
232};
233
234struct nfs4_getdeviceinfo_res {
235 struct pnfs_device *pdev;
236 struct nfs4_sequence_res seq_res;
237};
238
189/* 239/*
190 * Arguments to the open call. 240 * Arguments to the open call.
191 */ 241 */
diff --git a/include/linux/sunrpc/xdr.h b/include/linux/sunrpc/xdr.h
index ab91d86565fd..498ab93a81e4 100644
--- a/include/linux/sunrpc/xdr.h
+++ b/include/linux/sunrpc/xdr.h
@@ -132,6 +132,13 @@ xdr_decode_hyper(__be32 *p, __u64 *valp)
132 return p + 2; 132 return p + 2;
133} 133}
134 134
135static inline __be32 *
136xdr_decode_opaque_fixed(__be32 *p, void *ptr, unsigned int len)
137{
138 memcpy(ptr, p, len);
139 return p + XDR_QUADLEN(len);
140}
141
135/* 142/*
136 * Adjust kvec to reflect end of xdr'ed data (RPC client XDR) 143 * Adjust kvec to reflect end of xdr'ed data (RPC client XDR)
137 */ 144 */