Blame view

fs/nfs/internal.h 7.52 KB
f7b422b17   David Howells   NFS: Split fs/nfs...
1
2
3
4
5
  /*
   * NFS internal definitions
   */
  
  #include <linux/mount.h>
f9c3a3802   Eric Paris   NFS: use new LSM ...
6
  #include <linux/security.h>
f7b422b17   David Howells   NFS: Split fs/nfs...
7

54ceac451   David Howells   NFS: Share NFS su...
8
  struct nfs_string;
54ceac451   David Howells   NFS: Share NFS su...
9
10
11
12
13
14
15
16
  
  /* Maximum number of readahead requests
   * FIXME: this should really be a sysctl so that users may tune it to suit
   *        their needs. People that do NFS over a slow network, might for
   *        instance want to reduce it to something closer to 1 for improved
   *        interactive response.
   */
  #define NFS_MAX_READAHEAD	(RPC_DEF_SLOT_TABLE - 1)
f7b422b17   David Howells   NFS: Split fs/nfs...
17
18
19
20
21
22
23
  struct nfs_clone_mount {
  	const struct super_block *sb;
  	const struct dentry *dentry;
  	struct nfs_fh *fh;
  	struct nfs_fattr *fattr;
  	char *hostname;
  	char *mnt_path;
6677d0951   Chuck Lever   NFS: Adjust nfs_c...
24
25
  	struct sockaddr *addr;
  	size_t addrlen;
f7b422b17   David Howells   NFS: Split fs/nfs...
26
27
  	rpc_authflavor_t authflavor;
  };
6b18eaa08   \"Talpey, Thomas\   NFS: move nfs_par...
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
  /*
   * In-kernel mount arguments
   */
  struct nfs_parsed_mount_data {
  	int			flags;
  	int			rsize, wsize;
  	int			timeo, retrans;
  	int			acregmin, acregmax,
  				acdirmin, acdirmax;
  	int			namlen;
  	unsigned int		bsize;
  	unsigned int		auth_flavor_len;
  	rpc_authflavor_t	auth_flavors[1];
  	char			*client_address;
  
  	struct {
4c5680177   Chuck Lever   NFS: Support non-...
44
45
  		struct sockaddr_storage	address;
  		size_t			addrlen;
6b18eaa08   \"Talpey, Thomas\   NFS: move nfs_par...
46
  		char			*hostname;
78fa701f3   Chuck Lever   NFS: Fix up data ...
47
  		u32			version;
6b18eaa08   \"Talpey, Thomas\   NFS: move nfs_par...
48
  		unsigned short		port;
78fa701f3   Chuck Lever   NFS: Fix up data ...
49
  		unsigned short		protocol;
6b18eaa08   \"Talpey, Thomas\   NFS: move nfs_par...
50
51
52
  	} mount_server;
  
  	struct {
4c5680177   Chuck Lever   NFS: Support non-...
53
54
  		struct sockaddr_storage	address;
  		size_t			addrlen;
6b18eaa08   \"Talpey, Thomas\   NFS: move nfs_par...
55
56
  		char			*hostname;
  		char			*export_path;
f22d6d79f   Chuck Lever   NFS: Save the val...
57
  		unsigned short		port;
78fa701f3   Chuck Lever   NFS: Fix up data ...
58
  		unsigned short		protocol;
6b18eaa08   \"Talpey, Thomas\   NFS: move nfs_par...
59
  	} nfs_server;
f9c3a3802   Eric Paris   NFS: use new LSM ...
60
61
  
  	struct security_mnt_opts lsm_opts;
6b18eaa08   \"Talpey, Thomas\   NFS: move nfs_par...
62
  };
24c8dbbb5   David Howells   NFS: Generalise t...
63
  /* client.c */
54ceac451   David Howells   NFS: Share NFS su...
64
  extern struct rpc_program nfs_program;
24c8dbbb5   David Howells   NFS: Generalise t...
65
  extern void nfs_put_client(struct nfs_client *);
ff052645c   Chuck Lever   NFS: Change nfs_f...
66
  extern struct nfs_client *nfs_find_client(const struct sockaddr *, u32);
3fbd67ad6   Trond Myklebust   NFSv4: Iterate th...
67
  extern struct nfs_client *nfs_find_client_next(struct nfs_client *);
2283f8d6e   \"Talpey, Thomas\   NFS: use in-kerne...
68
69
70
  extern struct nfs_server *nfs_create_server(
  					const struct nfs_parsed_mount_data *,
  					struct nfs_fh *);
91ea40b9c   \"Talpey, Thomas\   NFS: use in-kerne...
71
72
73
  extern struct nfs_server *nfs4_create_server(
  					const struct nfs_parsed_mount_data *,
  					struct nfs_fh *);
54ceac451   David Howells   NFS: Share NFS su...
74
75
76
77
78
79
  extern struct nfs_server *nfs4_create_referral_server(struct nfs_clone_mount *,
  						      struct nfs_fh *);
  extern void nfs_free_server(struct nfs_server *server);
  extern struct nfs_server *nfs_clone_server(struct nfs_server *,
  					   struct nfs_fh *,
  					   struct nfs_fattr *);
6aaca5665   David Howells   NFS: Add server a...
80
81
82
83
84
85
86
87
88
89
90
91
  #ifdef CONFIG_PROC_FS
  extern int __init nfs_fs_proc_init(void);
  extern void nfs_fs_proc_exit(void);
  #else
  static inline int nfs_fs_proc_init(void)
  {
  	return 0;
  }
  static inline void nfs_fs_proc_exit(void)
  {
  }
  #endif
24c8dbbb5   David Howells   NFS: Generalise t...
92

7d4e2747a   David Howells   NFS: Fix up split...
93
  /* nfs4namespace.c */
f7b422b17   David Howells   NFS: Split fs/nfs...
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
  #ifdef CONFIG_NFS_V4
  extern struct vfsmount *nfs_do_refmount(const struct vfsmount *mnt_parent, struct dentry *dentry);
  #else
  static inline
  struct vfsmount *nfs_do_refmount(const struct vfsmount *mnt_parent, struct dentry *dentry)
  {
  	return ERR_PTR(-ENOENT);
  }
  #endif
  
  /* callback_xdr.c */
  extern struct svc_version nfs4_callback_version1;
  
  /* pagelist.c */
  extern int __init nfs_init_nfspagecache(void);
266bee886   David Brownell   [PATCH] fix stati...
109
  extern void nfs_destroy_nfspagecache(void);
f7b422b17   David Howells   NFS: Split fs/nfs...
110
  extern int __init nfs_init_readpagecache(void);
266bee886   David Brownell   [PATCH] fix stati...
111
  extern void nfs_destroy_readpagecache(void);
f7b422b17   David Howells   NFS: Split fs/nfs...
112
  extern int __init nfs_init_writepagecache(void);
266bee886   David Brownell   [PATCH] fix stati...
113
  extern void nfs_destroy_writepagecache(void);
f7b422b17   David Howells   NFS: Split fs/nfs...
114

f7b422b17   David Howells   NFS: Split fs/nfs...
115
  extern int __init nfs_init_directcache(void);
266bee886   David Brownell   [PATCH] fix stati...
116
  extern void nfs_destroy_directcache(void);
f7b422b17   David Howells   NFS: Split fs/nfs...
117
118
  
  /* nfs2xdr.c */
7d4e2747a   David Howells   NFS: Fix up split...
119
  extern int nfs_stat_to_errno(int);
f7b422b17   David Howells   NFS: Split fs/nfs...
120
  extern struct rpc_procinfo nfs_procedures[];
0dbb4c679   Al Viro   [PATCH] xdr annot...
121
  extern __be32 * nfs_decode_dirent(__be32 *, struct nfs_entry *, int);
f7b422b17   David Howells   NFS: Split fs/nfs...
122
123
124
  
  /* nfs3xdr.c */
  extern struct rpc_procinfo nfs3_procedures[];
0dbb4c679   Al Viro   [PATCH] xdr annot...
125
  extern __be32 *nfs3_decode_dirent(__be32 *, struct nfs_entry *, int);
f7b422b17   David Howells   NFS: Split fs/nfs...
126
127
  
  /* nfs4xdr.c */
7d4e2747a   David Howells   NFS: Fix up split...
128
  #ifdef CONFIG_NFS_V4
0dbb4c679   Al Viro   [PATCH] xdr annot...
129
  extern __be32 *nfs4_decode_dirent(__be32 *p, struct nfs_entry *entry, int plus);
7d4e2747a   David Howells   NFS: Fix up split...
130
  #endif
f7b422b17   David Howells   NFS: Split fs/nfs...
131
132
  
  /* nfs4proc.c */
d75d54147   Andrew Morton   git-nfs-build-fixes
133
  #ifdef CONFIG_NFS_V4
f7b422b17   David Howells   NFS: Split fs/nfs...
134
  extern struct rpc_procinfo nfs4_procedures[];
d75d54147   Andrew Morton   git-nfs-build-fixes
135
  #endif
f7b422b17   David Howells   NFS: Split fs/nfs...
136

979df72e6   Trond Myklebust   NFS: Add an ACCES...
137
138
  /* dir.c */
  extern int nfs_access_cache_shrinker(int nr_to_scan, gfp_t gfp_mask);
f7b422b17   David Howells   NFS: Split fs/nfs...
139
  /* inode.c */
5746006f1   Trond Myklebust   NFS: Add an nfsio...
140
  extern struct workqueue_struct *nfsiod_workqueue;
f7b422b17   David Howells   NFS: Split fs/nfs...
141
142
143
144
145
146
147
  extern struct inode *nfs_alloc_inode(struct super_block *sb);
  extern void nfs_destroy_inode(struct inode *);
  extern int nfs_write_inode(struct inode *,int);
  extern void nfs_clear_inode(struct inode *);
  #ifdef CONFIG_NFS_V4
  extern void nfs4_clear_inode(struct inode *);
  #endif
f41f74183   Trond Myklebust   NFS: Ensure we za...
148
  void nfs_zap_acl_cache(struct inode *inode);
f7b422b17   David Howells   NFS: Split fs/nfs...
149
150
  
  /* super.c */
ea31a4437   J. Bruce Fields   nfs: Fix misparsi...
151
  void nfs_parse_ip_address(char *, size_t, struct sockaddr *, size_t *);
54ceac451   David Howells   NFS: Share NFS su...
152
  extern struct file_system_type nfs_xdev_fs_type;
f7b422b17   David Howells   NFS: Split fs/nfs...
153
  #ifdef CONFIG_NFS_V4
54ceac451   David Howells   NFS: Share NFS su...
154
155
  extern struct file_system_type nfs4_xdev_fs_type;
  extern struct file_system_type nfs4_referral_fs_type;
f7b422b17   David Howells   NFS: Split fs/nfs...
156
  #endif
4ebd9ab38   Dominik Hackl   [PATCH] nfs: non-...
157

f7b422b17   David Howells   NFS: Split fs/nfs...
158
  extern struct rpc_stat nfs_rpcstat;
4ebd9ab38   Dominik Hackl   [PATCH] nfs: non-...
159

f7b422b17   David Howells   NFS: Split fs/nfs...
160
161
  extern int __init register_nfs_fs(void);
  extern void __exit unregister_nfs_fs(void);
1daef0a86   Trond Myklebust   NFS: Clean up nfs...
162
163
  extern void nfs_sb_active(struct super_block *sb);
  extern void nfs_sb_deactive(struct super_block *sb);
f7b422b17   David Howells   NFS: Split fs/nfs...
164
165
  
  /* namespace.c */
54ceac451   David Howells   NFS: Share NFS su...
166
167
168
  extern char *nfs_path(const char *base,
  		      const struct dentry *droot,
  		      const struct dentry *dentry,
f7b422b17   David Howells   NFS: Split fs/nfs...
169
  		      char *buffer, ssize_t buflen);
54ceac451   David Howells   NFS: Share NFS su...
170
171
  /* getroot.c */
  extern struct dentry *nfs_get_root(struct super_block *, struct nfs_fh *);
7d4e2747a   David Howells   NFS: Fix up split...
172
  #ifdef CONFIG_NFS_V4
54ceac451   David Howells   NFS: Share NFS su...
173
174
175
176
177
  extern struct dentry *nfs4_get_root(struct super_block *, struct nfs_fh *);
  
  extern int nfs4_path_walk(struct nfs_server *server,
  			  struct nfs_fh *mntfh,
  			  const char *path);
7d4e2747a   David Howells   NFS: Fix up split...
178
  #endif
f7b422b17   David Howells   NFS: Split fs/nfs...
179
180
181
182
183
  
  /*
   * Determine the device name as a string
   */
  static inline char *nfs_devname(const struct vfsmount *mnt_parent,
54ceac451   David Howells   NFS: Share NFS su...
184
185
  				const struct dentry *dentry,
  				char *buffer, ssize_t buflen)
f7b422b17   David Howells   NFS: Split fs/nfs...
186
  {
54ceac451   David Howells   NFS: Share NFS su...
187
188
  	return nfs_path(mnt_parent->mnt_devname, mnt_parent->mnt_root,
  			dentry, buffer, buflen);
f7b422b17   David Howells   NFS: Split fs/nfs...
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
  }
  
  /*
   * Determine the actual block size (and log2 thereof)
   */
  static inline
  unsigned long nfs_block_bits(unsigned long bsize, unsigned char *nrbitsp)
  {
  	/* make sure blocksize is a power of two */
  	if ((bsize & (bsize - 1)) || nrbitsp) {
  		unsigned char	nrbits;
  
  		for (nrbits = 31; nrbits && !(bsize & (1 << nrbits)); nrbits--)
  			;
  		bsize = 1 << nrbits;
  		if (nrbitsp)
  			*nrbitsp = nrbits;
  	}
  
  	return bsize;
  }
  
  /*
   * Calculate the number of 512byte blocks used.
   */
9eaa67c6a   Chuck Lever   NFS: Clean-up: us...
214
  static inline blkcnt_t nfs_calc_block_size(u64 tsize)
f7b422b17   David Howells   NFS: Split fs/nfs...
215
  {
9eaa67c6a   Chuck Lever   NFS: Clean-up: us...
216
  	blkcnt_t used = (tsize + 511) >> 9;
f7b422b17   David Howells   NFS: Split fs/nfs...
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
  	return (used > ULONG_MAX) ? ULONG_MAX : used;
  }
  
  /*
   * Compute and set NFS server blocksize
   */
  static inline
  unsigned long nfs_block_size(unsigned long bsize, unsigned char *nrbitsp)
  {
  	if (bsize < NFS_MIN_FILE_IO_SIZE)
  		bsize = NFS_DEF_FILE_IO_SIZE;
  	else if (bsize >= NFS_MAX_FILE_IO_SIZE)
  		bsize = NFS_MAX_FILE_IO_SIZE;
  
  	return nfs_block_bits(bsize, nrbitsp);
  }
  
  /*
   * Determine the maximum file size for a superblock
   */
  static inline
  void nfs_super_set_maxbytes(struct super_block *sb, __u64 maxfilesize)
  {
  	sb->s_maxbytes = (loff_t)maxfilesize;
  	if (sb->s_maxbytes > MAX_LFS_FILESIZE || sb->s_maxbytes <= 0)
  		sb->s_maxbytes = MAX_LFS_FILESIZE;
  }
49a70f278   Trond Myklebust   NFS: Cleanup: add...
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
  
  /*
   * Determine the number of bytes of data the page contains
   */
  static inline
  unsigned int nfs_page_length(struct page *page)
  {
  	loff_t i_size = i_size_read(page->mapping->host);
  
  	if (i_size > 0) {
  		pgoff_t end_index = (i_size - 1) >> PAGE_CACHE_SHIFT;
  		if (page->index < end_index)
  			return PAGE_CACHE_SIZE;
  		if (page->index == end_index)
  			return ((i_size - 1) & ~PAGE_CACHE_MASK) + 1;
  	}
  	return 0;
  }
8d5658c94   Trond Myklebust   NFS: Fix a buffer...
262
263
264
265
266
267
268
269
270
271
272
  
  /*
   * Determine the number of pages in an array of length 'len' and
   * with a base offset of 'base'
   */
  static inline
  unsigned int nfs_page_array_len(unsigned int base, size_t len)
  {
  	return ((unsigned long)len + (unsigned long)base +
  		PAGE_SIZE - 1) >> PAGE_SHIFT;
  }
ea31a4437   J. Bruce Fields   nfs: Fix misparsi...
273
  #define IPV6_SCOPE_DELIMITER	'%'
f0c929251   J. Bruce Fields   nfs: prepare to s...
274
275
276
277
278
279
280
  
  /*
   * Set the port number in an address.  Be agnostic about the address
   * family.
   */
  static inline void nfs_set_port(struct sockaddr *sap, unsigned short port)
  {
456018d79   J. Bruce Fields   NFS: Cleanup nfs_...
281
282
  	struct sockaddr_in *ap = (struct sockaddr_in *)sap;
  	struct sockaddr_in6 *ap6 = (struct sockaddr_in6 *)sap;
f0c929251   J. Bruce Fields   nfs: prepare to s...
283
  	switch (sap->sa_family) {
456018d79   J. Bruce Fields   NFS: Cleanup nfs_...
284
285
286
287
288
289
  	case AF_INET:
  		ap->sin_port = htons(port);
  		break;
  	case AF_INET6:
  		ap6->sin6_port = htons(port);
  		break;
f0c929251   J. Bruce Fields   nfs: prepare to s...
290
291
  	}
  }