Blame view

fs/nfsd/nfsd.h 14.8 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
  /*
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2
3
4
5
6
7
8
9
   * Hodge-podge collection of knfsd-related stuff.
   * I will sort this out later.
   *
   * Copyright (C) 1995-1997 Olaf Kirch <okir@monad.swb.de>
   */
  
  #ifndef LINUX_NFSD_NFSD_H
  #define LINUX_NFSD_NFSD_H
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
10
  #include <linux/types.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
11
  #include <linux/mount.h>
c10bd39d8   J. Bruce Fields   Remove include/li...
12
13
14
15
16
  #include <linux/nfs.h>
  #include <linux/nfs2.h>
  #include <linux/nfs3.h>
  #include <linux/nfs4.h>
  #include <linux/sunrpc/msg_prot.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
17
  #include <linux/nfsd/debug.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
18
  #include <linux/nfsd/export.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
19
  #include <linux/nfsd/stats.h>
c10bd39d8   J. Bruce Fields   Remove include/li...
20

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
21
22
23
  /*
   * nfsd version
   */
f3ec22b5b   Marc Eshel   nfsd41: provide s...
24
  #define NFSD_SUPPORTED_MINOR_VERSION	1
c10bd39d8   J. Bruce Fields   Remove include/li...
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
  /*
   * Maximum blocksizes supported by daemon under various circumstances.
   */
  #define NFSSVC_MAXBLKSIZE       RPCSVC_MAXPAYLOAD
  /* NFSv2 is limited by the protocol specification, see RFC 1094 */
  #define NFSSVC_MAXBLKSIZE_V2    (8*1024)
  
  
  /*
   * Largest number of bytes we need to allocate for an NFS
   * call or reply.  Used to control buffer sizes.  We use
   * the length of v3 WRITE, READDIR and READDIR replies
   * which are an RPC header, up to 26 XDR units of reply
   * data, and some page data.
   *
   * Note that accuracy here doesn't matter too much as the
   * size is rounded up to a page size when allocating space.
   */
  #define NFSD_BUFSIZE            ((RPC_MAX_HEADER_WITH_AUTH+26)*XDR_UNIT + NFSSVC_MAXBLKSIZE)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
44

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
45
  struct readdir_cd {
131a21c21   Al Viro   [PATCH] xdr annot...
46
  	__be32			err;	/* 0, nfserr, or nfserr_eof */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
47
  };
0a3adadee   J. Bruce Fields   nfsd: make fs/nfs...
48

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
49
50
51
52
  
  extern struct svc_program	nfsd_program;
  extern struct svc_version	nfsd_version2, nfsd_version3,
  				nfsd_version4;
8daf220a6   Benny Halevy   nfsd41: control n...
53
  extern u32			nfsd_supported_minorversion;
bedbdd8ba   Neil Brown   knfsd: Replace lo...
54
  extern struct mutex		nfsd_mutex;
70c3b76c2   NeilBrown   [PATCH] knfsd: Al...
55
  extern struct svc_serv		*nfsd_serv;
4bd9b0f4a   Andy Adamson   nfsd41: use globa...
56
  extern spinlock_t		nfsd_drc_lock;
0c193054a   Andy Adamson   nfsd41: hange fro...
57
58
  extern unsigned int		nfsd_drc_max_mem;
  extern unsigned int		nfsd_drc_mem_used;
a254b246e   Harvey Harrison   nfsd: fix sparse ...
59

88e9d34c7   James Morris   seq_file: constif...
60
  extern const struct seq_operations nfs_exports_op;
a254b246e   Harvey Harrison   nfsd: fix sparse ...
61

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
62
63
64
65
  /*
   * Function prototypes.
   */
  int		nfsd_svc(unsigned short port, int nrservs);
c7afef1f9   Al Viro   [PATCH] nfsd: mis...
66
  int		nfsd_dispatch(struct svc_rqst *rqstp, __be32 *statp);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
67

a254b246e   Harvey Harrison   nfsd: fix sparse ...
68
69
70
71
  int		nfsd_nrthreads(void);
  int		nfsd_nrpools(void);
  int		nfsd_get_nrthreads(int n, int *);
  int		nfsd_set_nrthreads(int n, int *);
a257cdd0e   Andreas Gruenbacher   [PATCH] NFSD: Add...
72
73
74
75
76
77
78
79
80
81
82
  #if defined(CONFIG_NFSD_V2_ACL) || defined(CONFIG_NFSD_V3_ACL)
  #ifdef CONFIG_NFSD_V2_ACL
  extern struct svc_version nfsd_acl_version2;
  #else
  #define nfsd_acl_version2 NULL
  #endif
  #ifdef CONFIG_NFSD_V3_ACL
  extern struct svc_version nfsd_acl_version3;
  #else
  #define nfsd_acl_version3 NULL
  #endif
a257cdd0e   Andreas Gruenbacher   [PATCH] NFSD: Add...
83
  #endif
6658d3a7b   NeilBrown   [PATCH] knfsd: re...
84
85
  enum vers_op {NFSD_SET, NFSD_CLEAR, NFSD_TEST, NFSD_AVAIL };
  int nfsd_vers(int vers, enum vers_op change);
8daf220a6   Benny Halevy   nfsd41: control n...
86
  int nfsd_minorversion(u32 minorversion, enum vers_op change);
6658d3a7b   NeilBrown   [PATCH] knfsd: re...
87
  void nfsd_reset_versions(void);
b41b66d63   NeilBrown   [PATCH] knfsd: al...
88
  int nfsd_create_serv(void);
6658d3a7b   NeilBrown   [PATCH] knfsd: re...
89

596bbe53e   NeilBrown   [PATCH] knfsd: Al...
90
  extern int nfsd_max_blksize;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
91

03a816b46   Steve Dickson   nfsd: restrict fi...
92
93
94
95
  static inline int nfsd_v4client(struct svc_rqst *rq)
  {
  	return rq->rq_prog == NFS_PROGRAM && rq->rq_vers == 4;
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
96
97
98
99
  /* 
   * NFSv4 State
   */
  #ifdef CONFIG_NFSD_V4
c2f1a551d   Meelap Shah   knfsd: nfsd4: var...
100
  extern unsigned int max_delegations;
720833960   Bryan Schumaker   NFSD: Call nfsd4_...
101
102
  void nfs4_state_init(void);
  int nfsd4_init_slabs(void);
e8ff2a845   J. Bruce Fields   knfsd: move nfsv4...
103
  void nfsd4_free_slabs(void);
29ab23cc5   J. Bruce Fields   nfsd4: allow nfs4...
104
  int nfs4_state_start(void);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
105
  void nfs4_state_shutdown(void);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
106
  void nfs4_reset_lease(time_t leasetime);
0964a3d3f   NeilBrown   [PATCH] knfsd: nf...
107
  int nfs4_reset_recoverydir(char *recdir);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
108
  #else
720833960   Bryan Schumaker   NFSD: Call nfsd4_...
109
110
  static inline void nfs4_state_init(void) { }
  static inline int nfsd4_init_slabs(void) { return 0; }
e8ff2a845   J. Bruce Fields   knfsd: move nfsv4...
111
  static inline void nfsd4_free_slabs(void) { }
c0826574d   Stephen Rothwell   nfsd: return succ...
112
  static inline int nfs4_state_start(void) { return 0; }
e8ff2a845   J. Bruce Fields   knfsd: move nfsv4...
113
  static inline void nfs4_state_shutdown(void) { }
e8ff2a845   J. Bruce Fields   knfsd: move nfsv4...
114
115
  static inline void nfs4_reset_lease(time_t leasetime) { }
  static inline int nfs4_reset_recoverydir(char *recdir) { return 0; }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
116
117
118
119
120
121
122
123
124
125
126
127
  #endif
  
  /*
   * lockd binding
   */
  void		nfsd_lockd_init(void);
  void		nfsd_lockd_shutdown(void);
  
  
  /*
   * These macros provide pre-xdr'ed values for faster operation.
   */
77f18f5e4   Harvey Harrison   nfs: replace uses...
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
  #define	nfs_ok			cpu_to_be32(NFS_OK)
  #define	nfserr_perm		cpu_to_be32(NFSERR_PERM)
  #define	nfserr_noent		cpu_to_be32(NFSERR_NOENT)
  #define	nfserr_io		cpu_to_be32(NFSERR_IO)
  #define	nfserr_nxio		cpu_to_be32(NFSERR_NXIO)
  #define	nfserr_eagain		cpu_to_be32(NFSERR_EAGAIN)
  #define	nfserr_acces		cpu_to_be32(NFSERR_ACCES)
  #define	nfserr_exist		cpu_to_be32(NFSERR_EXIST)
  #define	nfserr_xdev		cpu_to_be32(NFSERR_XDEV)
  #define	nfserr_nodev		cpu_to_be32(NFSERR_NODEV)
  #define	nfserr_notdir		cpu_to_be32(NFSERR_NOTDIR)
  #define	nfserr_isdir		cpu_to_be32(NFSERR_ISDIR)
  #define	nfserr_inval		cpu_to_be32(NFSERR_INVAL)
  #define	nfserr_fbig		cpu_to_be32(NFSERR_FBIG)
  #define	nfserr_nospc		cpu_to_be32(NFSERR_NOSPC)
  #define	nfserr_rofs		cpu_to_be32(NFSERR_ROFS)
  #define	nfserr_mlink		cpu_to_be32(NFSERR_MLINK)
  #define	nfserr_opnotsupp	cpu_to_be32(NFSERR_OPNOTSUPP)
  #define	nfserr_nametoolong	cpu_to_be32(NFSERR_NAMETOOLONG)
  #define	nfserr_notempty		cpu_to_be32(NFSERR_NOTEMPTY)
  #define	nfserr_dquot		cpu_to_be32(NFSERR_DQUOT)
  #define	nfserr_stale		cpu_to_be32(NFSERR_STALE)
  #define	nfserr_remote		cpu_to_be32(NFSERR_REMOTE)
  #define	nfserr_wflush		cpu_to_be32(NFSERR_WFLUSH)
  #define	nfserr_badhandle	cpu_to_be32(NFSERR_BADHANDLE)
  #define	nfserr_notsync		cpu_to_be32(NFSERR_NOT_SYNC)
  #define	nfserr_badcookie	cpu_to_be32(NFSERR_BAD_COOKIE)
  #define	nfserr_notsupp		cpu_to_be32(NFSERR_NOTSUPP)
  #define	nfserr_toosmall		cpu_to_be32(NFSERR_TOOSMALL)
  #define	nfserr_serverfault	cpu_to_be32(NFSERR_SERVERFAULT)
  #define	nfserr_badtype		cpu_to_be32(NFSERR_BADTYPE)
  #define	nfserr_jukebox		cpu_to_be32(NFSERR_JUKEBOX)
  #define	nfserr_denied		cpu_to_be32(NFSERR_DENIED)
  #define	nfserr_deadlock		cpu_to_be32(NFSERR_DEADLOCK)
  #define nfserr_expired          cpu_to_be32(NFSERR_EXPIRED)
  #define	nfserr_bad_cookie	cpu_to_be32(NFSERR_BAD_COOKIE)
  #define	nfserr_same		cpu_to_be32(NFSERR_SAME)
  #define	nfserr_clid_inuse	cpu_to_be32(NFSERR_CLID_INUSE)
  #define	nfserr_stale_clientid	cpu_to_be32(NFSERR_STALE_CLIENTID)
  #define	nfserr_resource		cpu_to_be32(NFSERR_RESOURCE)
  #define	nfserr_moved		cpu_to_be32(NFSERR_MOVED)
  #define	nfserr_nofilehandle	cpu_to_be32(NFSERR_NOFILEHANDLE)
  #define	nfserr_minor_vers_mismatch	cpu_to_be32(NFSERR_MINOR_VERS_MISMATCH)
  #define nfserr_share_denied	cpu_to_be32(NFSERR_SHARE_DENIED)
  #define nfserr_stale_stateid	cpu_to_be32(NFSERR_STALE_STATEID)
  #define nfserr_old_stateid	cpu_to_be32(NFSERR_OLD_STATEID)
  #define nfserr_bad_stateid	cpu_to_be32(NFSERR_BAD_STATEID)
  #define nfserr_bad_seqid	cpu_to_be32(NFSERR_BAD_SEQID)
  #define	nfserr_symlink		cpu_to_be32(NFSERR_SYMLINK)
  #define	nfserr_not_same		cpu_to_be32(NFSERR_NOT_SAME)
f9d7562fd   J. Bruce Fields   nfsd4: share file...
178
  #define nfserr_lock_range	cpu_to_be32(NFSERR_LOCK_RANGE)
77f18f5e4   Harvey Harrison   nfs: replace uses...
179
180
181
182
  #define	nfserr_restorefh	cpu_to_be32(NFSERR_RESTOREFH)
  #define	nfserr_attrnotsupp	cpu_to_be32(NFSERR_ATTRNOTSUPP)
  #define	nfserr_bad_xdr		cpu_to_be32(NFSERR_BAD_XDR)
  #define	nfserr_openmode		cpu_to_be32(NFSERR_OPENMODE)
f6af99ec1   J. Bruce Fields   nfsd4: name->id m...
183
  #define	nfserr_badowner		cpu_to_be32(NFSERR_BADOWNER)
77f18f5e4   Harvey Harrison   nfs: replace uses...
184
185
186
187
188
189
190
191
192
  #define	nfserr_locks_held	cpu_to_be32(NFSERR_LOCKS_HELD)
  #define	nfserr_op_illegal	cpu_to_be32(NFSERR_OP_ILLEGAL)
  #define	nfserr_grace		cpu_to_be32(NFSERR_GRACE)
  #define	nfserr_no_grace		cpu_to_be32(NFSERR_NO_GRACE)
  #define	nfserr_reclaim_bad	cpu_to_be32(NFSERR_RECLAIM_BAD)
  #define	nfserr_badname		cpu_to_be32(NFSERR_BADNAME)
  #define	nfserr_cb_path_down	cpu_to_be32(NFSERR_CB_PATH_DOWN)
  #define	nfserr_locked		cpu_to_be32(NFSERR_LOCKED)
  #define	nfserr_wrongsec		cpu_to_be32(NFSERR_WRONGSEC)
10add806c   Marc Eshel   nfsd41: define nf...
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
  #define nfserr_badiomode		cpu_to_be32(NFS4ERR_BADIOMODE)
  #define nfserr_badlayout		cpu_to_be32(NFS4ERR_BADLAYOUT)
  #define nfserr_bad_session_digest	cpu_to_be32(NFS4ERR_BAD_SESSION_DIGEST)
  #define nfserr_badsession		cpu_to_be32(NFS4ERR_BADSESSION)
  #define nfserr_badslot			cpu_to_be32(NFS4ERR_BADSLOT)
  #define nfserr_complete_already		cpu_to_be32(NFS4ERR_COMPLETE_ALREADY)
  #define nfserr_conn_not_bound_to_session cpu_to_be32(NFS4ERR_CONN_NOT_BOUND_TO_SESSION)
  #define nfserr_deleg_already_wanted	cpu_to_be32(NFS4ERR_DELEG_ALREADY_WANTED)
  #define nfserr_back_chan_busy		cpu_to_be32(NFS4ERR_BACK_CHAN_BUSY)
  #define nfserr_layouttrylater		cpu_to_be32(NFS4ERR_LAYOUTTRYLATER)
  #define nfserr_layoutunavailable	cpu_to_be32(NFS4ERR_LAYOUTUNAVAILABLE)
  #define nfserr_nomatching_layout	cpu_to_be32(NFS4ERR_NOMATCHING_LAYOUT)
  #define nfserr_recallconflict		cpu_to_be32(NFS4ERR_RECALLCONFLICT)
  #define nfserr_unknown_layouttype	cpu_to_be32(NFS4ERR_UNKNOWN_LAYOUTTYPE)
  #define nfserr_seq_misordered		cpu_to_be32(NFS4ERR_SEQ_MISORDERED)
  #define nfserr_sequence_pos		cpu_to_be32(NFS4ERR_SEQUENCE_POS)
  #define nfserr_req_too_big		cpu_to_be32(NFS4ERR_REQ_TOO_BIG)
  #define nfserr_rep_too_big		cpu_to_be32(NFS4ERR_REP_TOO_BIG)
  #define nfserr_rep_too_big_to_cache	cpu_to_be32(NFS4ERR_REP_TOO_BIG_TO_CACHE)
  #define nfserr_retry_uncached_rep	cpu_to_be32(NFS4ERR_RETRY_UNCACHED_REP)
  #define nfserr_unsafe_compound		cpu_to_be32(NFS4ERR_UNSAFE_COMPOUND)
  #define nfserr_too_many_ops		cpu_to_be32(NFS4ERR_TOO_MANY_OPS)
  #define nfserr_op_not_in_session	cpu_to_be32(NFS4ERR_OP_NOT_IN_SESSION)
  #define nfserr_hash_alg_unsupp		cpu_to_be32(NFS4ERR_HASH_ALG_UNSUPP)
  #define nfserr_clientid_busy		cpu_to_be32(NFS4ERR_CLIENTID_BUSY)
  #define nfserr_pnfs_io_hole		cpu_to_be32(NFS4ERR_PNFS_IO_HOLE)
  #define nfserr_seq_false_retry		cpu_to_be32(NFS4ERR_SEQ_FALSE_RETRY)
  #define nfserr_bad_high_slot		cpu_to_be32(NFS4ERR_BAD_HIGH_SLOT)
  #define nfserr_deadsession		cpu_to_be32(NFS4ERR_DEADSESSION)
  #define nfserr_encr_alg_unsupp		cpu_to_be32(NFS4ERR_ENCR_ALG_UNSUPP)
  #define nfserr_pnfs_no_layout		cpu_to_be32(NFS4ERR_PNFS_NO_LAYOUT)
  #define nfserr_not_only_op		cpu_to_be32(NFS4ERR_NOT_ONLY_OP)
  #define nfserr_wrong_cred		cpu_to_be32(NFS4ERR_WRONG_CRED)
  #define nfserr_wrong_type		cpu_to_be32(NFS4ERR_WRONG_TYPE)
  #define nfserr_dirdeleg_unavail		cpu_to_be32(NFS4ERR_DIRDELEG_UNAVAIL)
  #define nfserr_reject_deleg		cpu_to_be32(NFS4ERR_REJECT_DELEG)
  #define nfserr_returnconflict		cpu_to_be32(NFS4ERR_RETURNCONFLICT)
  #define nfserr_deleg_revoked		cpu_to_be32(NFS4ERR_DELEG_REVOKED)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
231
232
233
234
235
  
  /* error codes for internal use */
  /* if a request fails due to kmalloc failure, it gets dropped.
   *  Client should resend eventually
   */
77f18f5e4   Harvey Harrison   nfs: replace uses...
236
  #define	nfserr_dropit		cpu_to_be32(30000)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
237
  /* end-of-file indicator in readdir */
77f18f5e4   Harvey Harrison   nfs: replace uses...
238
  #define	nfserr_eof		cpu_to_be32(30001)
10add806c   Marc Eshel   nfsd41: define nf...
239
240
241
242
  /* replay detected */
  #define	nfserr_replay_me	cpu_to_be32(11001)
  /* nfs41 replay detected */
  #define	nfserr_replay_cache	cpu_to_be32(11002)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
243
244
245
246
247
248
249
250
  
  /* Check for dir entries '.' and '..' */
  #define isdotent(n, l)	(l < 3 && n[0] == '.' && (l == 1 || n[1] == '.'))
  
  /*
   * Time of server startup
   */
  extern struct timeval	nfssvc_boot;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
251
  #ifdef CONFIG_NFSD_V4
cf07d2ea4   J. Bruce Fields   nfsd4: simplify r...
252
  extern time_t nfsd4_lease;
efc4bb4fd   J. Bruce Fields   nfsd4: allow sett...
253
  extern time_t nfsd4_grace;
cf07d2ea4   J. Bruce Fields   nfsd4: simplify r...
254

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
255
256
257
258
259
  /* before processing a COMPOUND operation, we have to check that there
   * is enough space in the buffer for XDR encode to succeed.  otherwise,
   * we might process an operation with side effects, and be unable to
   * tell the client that the operation succeeded.
   *
e57101991   J.Bruce Fields   [PATCH] knfsd: nf...
260
   * COMPOUND_SLACK_SPACE - this is the minimum bytes of buffer space
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
261
262
263
264
   * needed to encode an "ordinary" _successful_ operation.  (GETATTR,
   * READ, READDIR, and READLINK have their own buffer checks.)  if we
   * fall below this level, we fail the next operation with NFS4ERR_RESOURCE.
   *
e57101991   J.Bruce Fields   [PATCH] knfsd: nf...
265
   * COMPOUND_ERR_SLACK_SPACE - this is the minimum bytes of buffer space
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
266
267
268
269
270
271
   * needed to encode an operation which has failed with NFS4ERR_RESOURCE.
   * care is taken to ensure that we never fall below this level for any
   * reason.
   */
  #define	COMPOUND_SLACK_SPACE		140    /* OP_GETFH */
  #define COMPOUND_ERR_SLACK_SPACE	12     /* OP_SETATTR */
ecec6e34e   J. Bruce Fields   nfsd4: expire cli...
272
  #define NFSD_LAUNDROMAT_MINTIMEOUT      1   /* seconds */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
273
274
275
276
  
  /*
   * The following attributes are currently not supported by the NFSv4 server:
   *    ARCHIVE       (deprecated anyway)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
277
278
279
280
281
282
283
   *    HIDDEN        (unlikely to be supported any time soon)
   *    MIMETYPE      (unlikely to be supported any time soon)
   *    QUOTA_*       (will be supported in a forthcoming patch)
   *    SYSTEM        (unlikely to be supported any time soon)
   *    TIME_BACKUP   (unlikely to be supported any time soon)
   *    TIME_CREATE   (unlikely to be supported any time soon)
   */
7e7057064   Andy Adamson   nfsd41: support f...
284
  #define NFSD4_SUPPORTED_ATTRS_WORD0                                                         \
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
285
286
287
288
289
290
291
  (FATTR4_WORD0_SUPPORTED_ATTRS   | FATTR4_WORD0_TYPE         | FATTR4_WORD0_FH_EXPIRE_TYPE   \
   | FATTR4_WORD0_CHANGE          | FATTR4_WORD0_SIZE         | FATTR4_WORD0_LINK_SUPPORT     \
   | FATTR4_WORD0_SYMLINK_SUPPORT | FATTR4_WORD0_NAMED_ATTR   | FATTR4_WORD0_FSID             \
   | FATTR4_WORD0_UNIQUE_HANDLES  | FATTR4_WORD0_LEASE_TIME   | FATTR4_WORD0_RDATTR_ERROR     \
   | FATTR4_WORD0_ACLSUPPORT      | FATTR4_WORD0_CANSETTIME   | FATTR4_WORD0_CASE_INSENSITIVE \
   | FATTR4_WORD0_CASE_PRESERVING | FATTR4_WORD0_CHOWN_RESTRICTED                             \
   | FATTR4_WORD0_FILEHANDLE      | FATTR4_WORD0_FILEID       | FATTR4_WORD0_FILES_AVAIL      \
81c3f4130   J.Bruce Fields   [PATCH] knfsd: nf...
292
   | FATTR4_WORD0_FILES_FREE      | FATTR4_WORD0_FILES_TOTAL  | FATTR4_WORD0_FS_LOCATIONS | FATTR4_WORD0_HOMOGENEOUS      \
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
293
294
   | FATTR4_WORD0_MAXFILESIZE     | FATTR4_WORD0_MAXLINK      | FATTR4_WORD0_MAXNAME          \
   | FATTR4_WORD0_MAXREAD         | FATTR4_WORD0_MAXWRITE     | FATTR4_WORD0_ACL)
7e7057064   Andy Adamson   nfsd41: support f...
295
  #define NFSD4_SUPPORTED_ATTRS_WORD1                                                         \
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
296
297
298
299
300
301
  (FATTR4_WORD1_MODE              | FATTR4_WORD1_NO_TRUNC     | FATTR4_WORD1_NUMLINKS         \
   | FATTR4_WORD1_OWNER	        | FATTR4_WORD1_OWNER_GROUP  | FATTR4_WORD1_RAWDEV           \
   | FATTR4_WORD1_SPACE_AVAIL     | FATTR4_WORD1_SPACE_FREE   | FATTR4_WORD1_SPACE_TOTAL      \
   | FATTR4_WORD1_SPACE_USED      | FATTR4_WORD1_TIME_ACCESS  | FATTR4_WORD1_TIME_ACCESS_SET  \
   | FATTR4_WORD1_TIME_DELTA   | FATTR4_WORD1_TIME_METADATA    \
   | FATTR4_WORD1_TIME_MODIFY     | FATTR4_WORD1_TIME_MODIFY_SET | FATTR4_WORD1_MOUNTED_ON_FILEID)
7e7057064   Andy Adamson   nfsd41: support f...
302
303
304
305
306
307
308
309
310
  #define NFSD4_SUPPORTED_ATTRS_WORD2 0
  
  #define NFSD4_1_SUPPORTED_ATTRS_WORD0 \
  	NFSD4_SUPPORTED_ATTRS_WORD0
  
  #define NFSD4_1_SUPPORTED_ATTRS_WORD1 \
  	NFSD4_SUPPORTED_ATTRS_WORD1
  
  #define NFSD4_1_SUPPORTED_ATTRS_WORD2 \
8c18f2052   Benny Halevy   nfsd41: SUPPATTR_...
311
  	(NFSD4_SUPPORTED_ATTRS_WORD2 | FATTR4_WORD2_SUPPATTR_EXCLCREAT)
7e7057064   Andy Adamson   nfsd41: support f...
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
  
  static inline u32 nfsd_suppattrs0(u32 minorversion)
  {
  	return minorversion ? NFSD4_1_SUPPORTED_ATTRS_WORD0
  			    : NFSD4_SUPPORTED_ATTRS_WORD0;
  }
  
  static inline u32 nfsd_suppattrs1(u32 minorversion)
  {
  	return minorversion ? NFSD4_1_SUPPORTED_ATTRS_WORD1
  			    : NFSD4_SUPPORTED_ATTRS_WORD1;
  }
  
  static inline u32 nfsd_suppattrs2(u32 minorversion)
  {
  	return minorversion ? NFSD4_1_SUPPORTED_ATTRS_WORD2
  			    : NFSD4_SUPPORTED_ATTRS_WORD2;
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
330
  /* These will return ERR_INVAL if specified in GETATTR or READDIR. */
c7e8472cf   Bryan Schumaker   NFSD: Remove unne...
331
332
  #define NFSD_WRITEONLY_ATTRS_WORD1 \
  	(FATTR4_WORD1_TIME_ACCESS_SET   | FATTR4_WORD1_TIME_MODIFY_SET)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
333
334
  
  /* These are the only attrs allowed in CREATE/OPEN/SETATTR. */
c7e8472cf   Bryan Schumaker   NFSD: Remove unne...
335
336
337
338
339
  #define NFSD_WRITEABLE_ATTRS_WORD0 \
  	(FATTR4_WORD0_SIZE | FATTR4_WORD0_ACL)
  #define NFSD_WRITEABLE_ATTRS_WORD1 \
  	(FATTR4_WORD1_MODE | FATTR4_WORD1_OWNER | FATTR4_WORD1_OWNER_GROUP \
  	| FATTR4_WORD1_TIME_ACCESS_SET | FATTR4_WORD1_TIME_MODIFY_SET)
7e7057064   Andy Adamson   nfsd41: support f...
340
  #define NFSD_WRITEABLE_ATTRS_WORD2 0
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
341

8c18f2052   Benny Halevy   nfsd41: SUPPATTR_...
342
343
344
345
346
347
348
349
350
351
352
  #define NFSD_SUPPATTR_EXCLCREAT_WORD0 \
  	NFSD_WRITEABLE_ATTRS_WORD0
  /*
   * we currently store the exclusive create verifier in the v_{a,m}time
   * attributes so the client can't set these at create time using EXCLUSIVE4_1
   */
  #define NFSD_SUPPATTR_EXCLCREAT_WORD1 \
  	(NFSD_WRITEABLE_ATTRS_WORD1 & \
  	 ~(FATTR4_WORD1_TIME_ACCESS_SET | FATTR4_WORD1_TIME_MODIFY_SET))
  #define NFSD_SUPPATTR_EXCLCREAT_WORD2 \
  	NFSD_WRITEABLE_ATTRS_WORD2
11fcee029   Trond Myklebust   NFSD: Add a cache...
353
354
355
356
357
358
  extern int nfsd4_is_junction(struct dentry *dentry);
  #else
  static inline int nfsd4_is_junction(struct dentry *dentry)
  {
  	return 0;
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
359
  #endif /* CONFIG_NFSD_V4 */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
360
  #endif /* LINUX_NFSD_NFSD_H */