diff options
Diffstat (limited to 'fs/nfs/internal.h')
-rw-r--r-- | fs/nfs/internal.h | 82 |
1 files changed, 46 insertions, 36 deletions
diff --git a/fs/nfs/internal.h b/fs/nfs/internal.h index 2f3aa52fbefc..e73ba4f1052a 100644 --- a/fs/nfs/internal.h +++ b/fs/nfs/internal.h | |||
@@ -4,6 +4,18 @@ | |||
4 | 4 | ||
5 | #include <linux/mount.h> | 5 | #include <linux/mount.h> |
6 | 6 | ||
7 | struct nfs_string; | ||
8 | struct nfs_mount_data; | ||
9 | struct nfs4_mount_data; | ||
10 | |||
11 | /* Maximum number of readahead requests | ||
12 | * FIXME: this should really be a sysctl so that users may tune it to suit | ||
13 | * their needs. People that do NFS over a slow network, might for | ||
14 | * instance want to reduce it to something closer to 1 for improved | ||
15 | * interactive response. | ||
16 | */ | ||
17 | #define NFS_MAX_READAHEAD (RPC_DEF_SLOT_TABLE - 1) | ||
18 | |||
7 | struct nfs_clone_mount { | 19 | struct nfs_clone_mount { |
8 | const struct super_block *sb; | 20 | const struct super_block *sb; |
9 | const struct dentry *dentry; | 21 | const struct dentry *dentry; |
@@ -16,12 +28,25 @@ struct nfs_clone_mount { | |||
16 | }; | 28 | }; |
17 | 29 | ||
18 | /* client.c */ | 30 | /* client.c */ |
31 | extern struct rpc_program nfs_program; | ||
32 | |||
19 | extern void nfs_put_client(struct nfs_client *); | 33 | extern void nfs_put_client(struct nfs_client *); |
20 | extern struct nfs_client *nfs_find_client(const struct sockaddr_in *, int); | 34 | extern struct nfs_client *nfs_find_client(const struct sockaddr_in *, int); |
21 | extern struct nfs_client *nfs_get_client(const char *, const struct sockaddr_in *, int); | 35 | extern struct nfs_server *nfs_create_server(const struct nfs_mount_data *, |
22 | extern void nfs_mark_client_ready(struct nfs_client *, int); | 36 | struct nfs_fh *); |
23 | extern int nfs_create_rpc_client(struct nfs_client *, int, unsigned int, | 37 | extern struct nfs_server *nfs4_create_server(const struct nfs4_mount_data *, |
24 | unsigned int, rpc_authflavor_t); | 38 | const char *, |
39 | const struct sockaddr_in *, | ||
40 | const char *, | ||
41 | const char *, | ||
42 | rpc_authflavor_t, | ||
43 | struct nfs_fh *); | ||
44 | extern struct nfs_server *nfs4_create_referral_server(struct nfs_clone_mount *, | ||
45 | struct nfs_fh *); | ||
46 | extern void nfs_free_server(struct nfs_server *server); | ||
47 | extern struct nfs_server *nfs_clone_server(struct nfs_server *, | ||
48 | struct nfs_fh *, | ||
49 | struct nfs_fattr *); | ||
25 | 50 | ||
26 | /* nfs4namespace.c */ | 51 | /* nfs4namespace.c */ |
27 | #ifdef CONFIG_NFS_V4 | 52 | #ifdef CONFIG_NFS_V4 |
@@ -89,10 +114,10 @@ extern void nfs4_clear_inode(struct inode *); | |||
89 | #endif | 114 | #endif |
90 | 115 | ||
91 | /* super.c */ | 116 | /* super.c */ |
92 | extern struct file_system_type nfs_referral_nfs4_fs_type; | 117 | extern struct file_system_type nfs_xdev_fs_type; |
93 | extern struct file_system_type clone_nfs_fs_type; | ||
94 | #ifdef CONFIG_NFS_V4 | 118 | #ifdef CONFIG_NFS_V4 |
95 | extern struct file_system_type clone_nfs4_fs_type; | 119 | extern struct file_system_type nfs4_xdev_fs_type; |
120 | extern struct file_system_type nfs4_referral_fs_type; | ||
96 | #endif | 121 | #endif |
97 | 122 | ||
98 | extern struct rpc_stat nfs_rpcstat; | 123 | extern struct rpc_stat nfs_rpcstat; |
@@ -101,28 +126,30 @@ extern int __init register_nfs_fs(void); | |||
101 | extern void __exit unregister_nfs_fs(void); | 126 | extern void __exit unregister_nfs_fs(void); |
102 | 127 | ||
103 | /* namespace.c */ | 128 | /* namespace.c */ |
104 | extern char *nfs_path(const char *base, const struct dentry *dentry, | 129 | extern char *nfs_path(const char *base, |
130 | const struct dentry *droot, | ||
131 | const struct dentry *dentry, | ||
105 | char *buffer, ssize_t buflen); | 132 | char *buffer, ssize_t buflen); |
106 | 133 | ||
107 | /* | 134 | /* getroot.c */ |
108 | * Determine the mount path as a string | 135 | extern struct dentry *nfs_get_root(struct super_block *, struct nfs_fh *); |
109 | */ | ||
110 | #ifdef CONFIG_NFS_V4 | 136 | #ifdef CONFIG_NFS_V4 |
111 | static inline char * | 137 | extern struct dentry *nfs4_get_root(struct super_block *, struct nfs_fh *); |
112 | nfs4_path(const struct dentry *dentry, char *buffer, ssize_t buflen) | 138 | |
113 | { | 139 | extern int nfs4_path_walk(struct nfs_server *server, |
114 | return nfs_path(NFS_SB(dentry->d_sb)->mnt_path, dentry, buffer, buflen); | 140 | struct nfs_fh *mntfh, |
115 | } | 141 | const char *path); |
116 | #endif | 142 | #endif |
117 | 143 | ||
118 | /* | 144 | /* |
119 | * Determine the device name as a string | 145 | * Determine the device name as a string |
120 | */ | 146 | */ |
121 | static inline char *nfs_devname(const struct vfsmount *mnt_parent, | 147 | static inline char *nfs_devname(const struct vfsmount *mnt_parent, |
122 | const struct dentry *dentry, | 148 | const struct dentry *dentry, |
123 | char *buffer, ssize_t buflen) | 149 | char *buffer, ssize_t buflen) |
124 | { | 150 | { |
125 | return nfs_path(mnt_parent->mnt_devname, dentry, buffer, buflen); | 151 | return nfs_path(mnt_parent->mnt_devname, mnt_parent->mnt_root, |
152 | dentry, buffer, buflen); | ||
126 | } | 153 | } |
127 | 154 | ||
128 | /* | 155 | /* |
@@ -178,20 +205,3 @@ void nfs_super_set_maxbytes(struct super_block *sb, __u64 maxfilesize) | |||
178 | if (sb->s_maxbytes > MAX_LFS_FILESIZE || sb->s_maxbytes <= 0) | 205 | if (sb->s_maxbytes > MAX_LFS_FILESIZE || sb->s_maxbytes <= 0) |
179 | sb->s_maxbytes = MAX_LFS_FILESIZE; | 206 | sb->s_maxbytes = MAX_LFS_FILESIZE; |
180 | } | 207 | } |
181 | |||
182 | /* | ||
183 | * Check if the string represents a "valid" IPv4 address | ||
184 | */ | ||
185 | static inline int valid_ipaddr4(const char *buf) | ||
186 | { | ||
187 | int rc, count, in[4]; | ||
188 | |||
189 | rc = sscanf(buf, "%d.%d.%d.%d", &in[0], &in[1], &in[2], &in[3]); | ||
190 | if (rc != 4) | ||
191 | return -EINVAL; | ||
192 | for (count = 0; count < 4; count++) { | ||
193 | if (in[count] > 255) | ||
194 | return -EINVAL; | ||
195 | } | ||
196 | return 0; | ||
197 | } | ||