diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2010-06-06 18:43:19 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2010-08-09 16:48:08 -0400 |
commit | 52b209f7b848a28987ed133dc2b48f304b1dc6b8 (patch) | |
tree | 219c337db2c9910c4029977d327b6cfbd5c91d0f /fs/hostfs | |
parent | 601d2c38b93130d387091c28d13abea40924e518 (diff) |
get rid of hostfs_read_inode()
There are only two call sites; in one (hostfs_iget()) it's actually
a no-op and in another (fill_super()) it's easier to expand the
damn thing and use what we know about its arguments to simplify
it.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/hostfs')
-rw-r--r-- | fs/hostfs/hostfs_kern.c | 69 |
1 files changed, 16 insertions, 53 deletions
diff --git a/fs/hostfs/hostfs_kern.c b/fs/hostfs/hostfs_kern.c index 7e6750499b8b..25d79298a98e 100644 --- a/fs/hostfs/hostfs_kern.c +++ b/fs/hostfs/hostfs_kern.c | |||
@@ -204,50 +204,11 @@ static char *follow_link(char *link) | |||
204 | return ERR_PTR(n); | 204 | return ERR_PTR(n); |
205 | } | 205 | } |
206 | 206 | ||
207 | static int hostfs_read_inode(struct inode *ino) | ||
208 | { | ||
209 | char *name; | ||
210 | int err = 0; | ||
211 | |||
212 | /* | ||
213 | * Unfortunately, we are called from iget() when we don't have a dentry | ||
214 | * allocated yet. | ||
215 | */ | ||
216 | if (list_empty(&ino->i_dentry)) | ||
217 | goto out; | ||
218 | |||
219 | err = -ENOMEM; | ||
220 | name = inode_name(ino, 0); | ||
221 | if (name == NULL) | ||
222 | goto out; | ||
223 | |||
224 | if (file_type(name, NULL, NULL) == OS_TYPE_SYMLINK) { | ||
225 | name = follow_link(name); | ||
226 | if (IS_ERR(name)) { | ||
227 | err = PTR_ERR(name); | ||
228 | goto out; | ||
229 | } | ||
230 | } | ||
231 | |||
232 | err = read_name(ino, name); | ||
233 | kfree(name); | ||
234 | out: | ||
235 | return err; | ||
236 | } | ||
237 | |||
238 | static struct inode *hostfs_iget(struct super_block *sb) | 207 | static struct inode *hostfs_iget(struct super_block *sb) |
239 | { | 208 | { |
240 | struct inode *inode; | 209 | struct inode *inode = new_inode(sb); |
241 | long ret; | ||
242 | |||
243 | inode = new_inode(sb); | ||
244 | if (!inode) | 210 | if (!inode) |
245 | return ERR_PTR(-ENOMEM); | 211 | return ERR_PTR(-ENOMEM); |
246 | ret = hostfs_read_inode(inode); | ||
247 | if (ret < 0) { | ||
248 | iput(inode); | ||
249 | return ERR_PTR(ret); | ||
250 | } | ||
251 | return inode; | 212 | return inode; |
252 | } | 213 | } |
253 | 214 | ||
@@ -979,13 +940,23 @@ static int hostfs_fill_sb_common(struct super_block *sb, void *d, int silent) | |||
979 | 940 | ||
980 | sprintf(host_root_path, "%s/%s", root_ino, req_root); | 941 | sprintf(host_root_path, "%s/%s", root_ino, req_root); |
981 | 942 | ||
982 | root_inode = hostfs_iget(sb); | 943 | root_inode = new_inode(sb); |
983 | if (IS_ERR(root_inode)) { | 944 | if (!root_inode) |
984 | err = PTR_ERR(root_inode); | ||
985 | goto out; | 945 | goto out; |
986 | } | ||
987 | 946 | ||
988 | err = init_inode(root_inode, NULL); | 947 | root_inode->i_op = &hostfs_dir_iops; |
948 | root_inode->i_fop = &hostfs_dir_fops; | ||
949 | |||
950 | if (file_type(host_root_path, NULL, NULL) == OS_TYPE_SYMLINK) { | ||
951 | char *name = follow_link(host_root_path); | ||
952 | if (IS_ERR(name)) | ||
953 | err = PTR_ERR(name); | ||
954 | else | ||
955 | err = read_name(root_inode, name); | ||
956 | kfree(name); | ||
957 | } else { | ||
958 | err = read_name(root_inode, host_root_path); | ||
959 | } | ||
989 | if (err) | 960 | if (err) |
990 | goto out_put; | 961 | goto out_put; |
991 | 962 | ||
@@ -994,14 +965,6 @@ static int hostfs_fill_sb_common(struct super_block *sb, void *d, int silent) | |||
994 | if (sb->s_root == NULL) | 965 | if (sb->s_root == NULL) |
995 | goto out_put; | 966 | goto out_put; |
996 | 967 | ||
997 | err = hostfs_read_inode(root_inode); | ||
998 | if (err) { | ||
999 | /* No iput in this case because the dput does that for us */ | ||
1000 | dput(sb->s_root); | ||
1001 | sb->s_root = NULL; | ||
1002 | goto out; | ||
1003 | } | ||
1004 | |||
1005 | return 0; | 968 | return 0; |
1006 | 969 | ||
1007 | out_put: | 970 | out_put: |