diff options
author | David Howells <dhowells@redhat.com> | 2008-02-07 03:15:34 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-02-07 11:42:27 -0500 |
commit | 298384cd7929a3a14d7b116095973f0d02f5d09e (patch) | |
tree | 651ef96b214831a77e12b120d8eb5262a9d49d74 /fs/efs/super.c | |
parent | ce634ab28e7dbcc13ebe6e7bc5bc7de4f8def4c8 (diff) |
iget: stop EFS from using iget() and read_inode()
Stop the EFS filesystem from using iget() and read_inode(). Replace
efs_read_inode() with efs_iget(), and call that instead of iget(). efs_iget()
then uses iget_locked() directly and returns a proper error code instead of an
inode in the event of an error.
efs_fill_super() returns any error incurred when getting the root inode
instead of EACCES.
[akpm@linux-foundation.org: coding-style fixes]
Signed-off-by: David Howells <dhowells@redhat.com>
Acked-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'fs/efs/super.c')
-rw-r--r-- | fs/efs/super.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/fs/efs/super.c b/fs/efs/super.c index c79bc627f107..14082405cdd1 100644 --- a/fs/efs/super.c +++ b/fs/efs/super.c | |||
@@ -107,7 +107,6 @@ static int efs_remount(struct super_block *sb, int *flags, char *data) | |||
107 | static const struct super_operations efs_superblock_operations = { | 107 | static const struct super_operations efs_superblock_operations = { |
108 | .alloc_inode = efs_alloc_inode, | 108 | .alloc_inode = efs_alloc_inode, |
109 | .destroy_inode = efs_destroy_inode, | 109 | .destroy_inode = efs_destroy_inode, |
110 | .read_inode = efs_read_inode, | ||
111 | .put_super = efs_put_super, | 110 | .put_super = efs_put_super, |
112 | .statfs = efs_statfs, | 111 | .statfs = efs_statfs, |
113 | .remount_fs = efs_remount, | 112 | .remount_fs = efs_remount, |
@@ -247,6 +246,7 @@ static int efs_fill_super(struct super_block *s, void *d, int silent) | |||
247 | struct efs_sb_info *sb; | 246 | struct efs_sb_info *sb; |
248 | struct buffer_head *bh; | 247 | struct buffer_head *bh; |
249 | struct inode *root; | 248 | struct inode *root; |
249 | int ret = -EINVAL; | ||
250 | 250 | ||
251 | sb = kzalloc(sizeof(struct efs_sb_info), GFP_KERNEL); | 251 | sb = kzalloc(sizeof(struct efs_sb_info), GFP_KERNEL); |
252 | if (!sb) | 252 | if (!sb) |
@@ -303,12 +303,18 @@ static int efs_fill_super(struct super_block *s, void *d, int silent) | |||
303 | } | 303 | } |
304 | s->s_op = &efs_superblock_operations; | 304 | s->s_op = &efs_superblock_operations; |
305 | s->s_export_op = &efs_export_ops; | 305 | s->s_export_op = &efs_export_ops; |
306 | root = iget(s, EFS_ROOTINODE); | 306 | root = efs_iget(s, EFS_ROOTINODE); |
307 | if (IS_ERR(root)) { | ||
308 | printk(KERN_ERR "EFS: get root inode failed\n"); | ||
309 | ret = PTR_ERR(root); | ||
310 | goto out_no_fs; | ||
311 | } | ||
312 | |||
307 | s->s_root = d_alloc_root(root); | 313 | s->s_root = d_alloc_root(root); |
308 | |||
309 | if (!(s->s_root)) { | 314 | if (!(s->s_root)) { |
310 | printk(KERN_ERR "EFS: get root inode failed\n"); | 315 | printk(KERN_ERR "EFS: get root dentry failed\n"); |
311 | iput(root); | 316 | iput(root); |
317 | ret = -ENOMEM; | ||
312 | goto out_no_fs; | 318 | goto out_no_fs; |
313 | } | 319 | } |
314 | 320 | ||
@@ -318,7 +324,7 @@ out_no_fs_ul: | |||
318 | out_no_fs: | 324 | out_no_fs: |
319 | s->s_fs_info = NULL; | 325 | s->s_fs_info = NULL; |
320 | kfree(sb); | 326 | kfree(sb); |
321 | return -EINVAL; | 327 | return ret; |
322 | } | 328 | } |
323 | 329 | ||
324 | static int efs_statfs(struct dentry *dentry, struct kstatfs *buf) { | 330 | static int efs_statfs(struct dentry *dentry, struct kstatfs *buf) { |