Skip to content

Commit

Permalink
adfs: return correct return values
Browse files Browse the repository at this point in the history
Fix the wrong values returned by various functions such as EIO and ENOMEM.

Signed-off-by: Sanidhya Kashyap <[email protected]>
Cc: Fabian Frederick <[email protected]>
Cc: Joe Perches <[email protected]>
Cc: Taesoo kim <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
Sanidhya Kashyap authored and torvalds committed Apr 17, 2015
1 parent 9d796e6 commit b796410
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 5 deletions.
1 change: 1 addition & 0 deletions fs/adfs/dir_fplus.c
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ adfs_fplus_read(struct super_block *sb, unsigned int id, unsigned int sz, struct
kcalloc(size, sizeof(struct buffer_head *),
GFP_KERNEL);
if (!bh_fplus) {
ret = -ENOMEM;
adfs_error(sb, "not enough memory for"
" dir object %X (%d blocks)", id, size);
goto out;
Expand Down
20 changes: 15 additions & 5 deletions fs/adfs/super.c
Original file line number Diff line number Diff line change
Expand Up @@ -316,7 +316,7 @@ static struct adfs_discmap *adfs_read_map(struct super_block *sb, struct adfs_di
dm = kmalloc(nzones * sizeof(*dm), GFP_KERNEL);
if (dm == NULL) {
adfs_error(sb, "not enough memory");
return NULL;
return ERR_PTR(-ENOMEM);
}

for (zone = 0; zone < nzones; zone++, map_addr++) {
Expand Down Expand Up @@ -349,7 +349,7 @@ static struct adfs_discmap *adfs_read_map(struct super_block *sb, struct adfs_di
brelse(dm[zone].dm_bh);

kfree(dm);
return NULL;
return ERR_PTR(-EIO);
}

static inline unsigned long adfs_discsize(struct adfs_discrecord *dr, int block_bits)
Expand All @@ -370,6 +370,7 @@ static int adfs_fill_super(struct super_block *sb, void *data, int silent)
unsigned char *b_data;
struct adfs_sb_info *asb;
struct inode *root;
int ret = -EINVAL;

sb->s_flags |= MS_NODIRATIME;

Expand All @@ -391,6 +392,7 @@ static int adfs_fill_super(struct super_block *sb, void *data, int silent)
sb_set_blocksize(sb, BLOCK_SIZE);
if (!(bh = sb_bread(sb, ADFS_DISCRECORD / BLOCK_SIZE))) {
adfs_error(sb, "unable to read superblock");
ret = -EIO;
goto error;
}

Expand All @@ -400,6 +402,7 @@ static int adfs_fill_super(struct super_block *sb, void *data, int silent)
if (!silent)
printk("VFS: Can't find an adfs filesystem on dev "
"%s.\n", sb->s_id);
ret = -EINVAL;
goto error_free_bh;
}

Expand All @@ -412,6 +415,7 @@ static int adfs_fill_super(struct super_block *sb, void *data, int silent)
if (!silent)
printk("VPS: Can't find an adfs filesystem on dev "
"%s.\n", sb->s_id);
ret = -EINVAL;
goto error_free_bh;
}

Expand All @@ -421,18 +425,21 @@ static int adfs_fill_super(struct super_block *sb, void *data, int silent)
if (!bh) {
adfs_error(sb, "couldn't read superblock on "
"2nd try.");
ret = -EIO;
goto error;
}
b_data = bh->b_data + (ADFS_DISCRECORD % sb->s_blocksize);
if (adfs_checkbblk(b_data)) {
adfs_error(sb, "disc record mismatch, very weird!");
ret = -EINVAL;
goto error_free_bh;
}
dr = (struct adfs_discrecord *)(b_data + ADFS_DR_OFFSET);
} else {
if (!silent)
printk(KERN_ERR "VFS: Unsupported blocksize on dev "
"%s.\n", sb->s_id);
ret = -EINVAL;
goto error;
}

Expand All @@ -447,10 +454,12 @@ static int adfs_fill_super(struct super_block *sb, void *data, int silent)
asb->s_size = adfs_discsize(dr, sb->s_blocksize_bits);
asb->s_version = dr->format_version;
asb->s_log2sharesize = dr->log2sharesize;

asb->s_map = adfs_read_map(sb, dr);
if (!asb->s_map)
if (IS_ERR(asb->s_map)) {
ret = PTR_ERR(asb->s_map);
goto error_free_bh;
}

brelse(bh);

Expand Down Expand Up @@ -499,6 +508,7 @@ static int adfs_fill_super(struct super_block *sb, void *data, int silent)
brelse(asb->s_map[i].dm_bh);
kfree(asb->s_map);
adfs_error(sb, "get root inode failed\n");
ret = -EIO;
goto error;
}
return 0;
Expand All @@ -508,7 +518,7 @@ static int adfs_fill_super(struct super_block *sb, void *data, int silent)
error:
sb->s_fs_info = NULL;
kfree(asb);
return -EINVAL;
return ret;
}

static struct dentry *adfs_mount(struct file_system_type *fs_type,
Expand Down

0 comments on commit b796410

Please sign in to comment.