|
@@ -113,7 +113,6 @@ static void destroy_inodecache(void)
|
|
static const struct super_operations affs_sops = {
|
|
static const struct super_operations affs_sops = {
|
|
.alloc_inode = affs_alloc_inode,
|
|
.alloc_inode = affs_alloc_inode,
|
|
.destroy_inode = affs_destroy_inode,
|
|
.destroy_inode = affs_destroy_inode,
|
|
- .read_inode = affs_read_inode,
|
|
|
|
.write_inode = affs_write_inode,
|
|
.write_inode = affs_write_inode,
|
|
.put_inode = affs_put_inode,
|
|
.put_inode = affs_put_inode,
|
|
.drop_inode = affs_drop_inode,
|
|
.drop_inode = affs_drop_inode,
|
|
@@ -271,6 +270,7 @@ static int affs_fill_super(struct super_block *sb, void *data, int silent)
|
|
unsigned long mount_flags;
|
|
unsigned long mount_flags;
|
|
int tmp_flags; /* fix remount prototype... */
|
|
int tmp_flags; /* fix remount prototype... */
|
|
u8 sig[4];
|
|
u8 sig[4];
|
|
|
|
+ int ret = -EINVAL;
|
|
|
|
|
|
pr_debug("AFFS: read_super(%s)\n",data ? (const char *)data : "no options");
|
|
pr_debug("AFFS: read_super(%s)\n",data ? (const char *)data : "no options");
|
|
|
|
|
|
@@ -444,7 +444,12 @@ got_root:
|
|
|
|
|
|
/* set up enough so that it can read an inode */
|
|
/* set up enough so that it can read an inode */
|
|
|
|
|
|
- root_inode = iget(sb, root_block);
|
|
|
|
|
|
+ root_inode = affs_iget(sb, root_block);
|
|
|
|
+ if (IS_ERR(root_inode)) {
|
|
|
|
+ ret = PTR_ERR(root_inode);
|
|
|
|
+ goto out_error_noinode;
|
|
|
|
+ }
|
|
|
|
+
|
|
sb->s_root = d_alloc_root(root_inode);
|
|
sb->s_root = d_alloc_root(root_inode);
|
|
if (!sb->s_root) {
|
|
if (!sb->s_root) {
|
|
printk(KERN_ERR "AFFS: Get root inode failed\n");
|
|
printk(KERN_ERR "AFFS: Get root inode failed\n");
|
|
@@ -461,12 +466,13 @@ got_root:
|
|
out_error:
|
|
out_error:
|
|
if (root_inode)
|
|
if (root_inode)
|
|
iput(root_inode);
|
|
iput(root_inode);
|
|
|
|
+out_error_noinode:
|
|
kfree(sbi->s_bitmap);
|
|
kfree(sbi->s_bitmap);
|
|
affs_brelse(root_bh);
|
|
affs_brelse(root_bh);
|
|
kfree(sbi->s_prefix);
|
|
kfree(sbi->s_prefix);
|
|
kfree(sbi);
|
|
kfree(sbi);
|
|
sb->s_fs_info = NULL;
|
|
sb->s_fs_info = NULL;
|
|
- return -EINVAL;
|
|
|
|
|
|
+ return ret;
|
|
}
|
|
}
|
|
|
|
|
|
static int
|
|
static int
|