Skip to content

Commit

Permalink
vfs: simple_set_mnt() should return void
Browse files Browse the repository at this point in the history
simple_set_mnt() is defined as returning 'int' but always returns 0.
Callers assume simple_set_mnt() never fails and don't properly cleanup if
it were to _ever_ fail.  For instance, get_sb_single() and get_sb_nodev()
should:

        up_write(sb->s_unmount);
        deactivate_super(sb);

if simple_set_mnt() fails.

Since simple_set_mnt() never fails, would be cleaner if it did not
return anything.

[[email protected]: fix build]
Signed-off-by: Sukadev Bhattiprolu <[email protected]>
Acked-by: Serge Hallyn <[email protected]>
Cc: Al Viro <[email protected]>
Cc: Christoph Hellwig <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Al Viro <[email protected]>
  • Loading branch information
Sukadev Bhattiprolu authored and Al Viro committed Mar 27, 2009
1 parent 585d3bc commit a3ec947
Show file tree
Hide file tree
Showing 11 changed files with 28 additions and 16 deletions.
7 changes: 5 additions & 2 deletions drivers/mtd/mtdsuper.c
Original file line number Diff line number Diff line change
Expand Up @@ -81,13 +81,16 @@ static int get_sb_mtd_aux(struct file_system_type *fs_type, int flags,

/* go */
sb->s_flags |= MS_ACTIVE;
return simple_set_mnt(mnt, sb);
simple_set_mnt(mnt, sb);

return 0;

/* new mountpoint for an already mounted superblock */
already_mounted:
DEBUG(1, "MTDSB: Device %d (\"%s\") is already mounted\n",
mtd->index, mtd->name);
ret = simple_set_mnt(mnt, sb);
simple_set_mnt(mnt, sb);
ret = 0;
goto out_put;

out_error:
Expand Down
5 changes: 3 additions & 2 deletions fs/9p/vfs_super.c
Original file line number Diff line number Diff line change
Expand Up @@ -168,8 +168,9 @@ static int v9fs_get_sb(struct file_system_type *fs_type, int flags,
p9stat_free(st);
kfree(st);

P9_DPRINTK(P9_DEBUG_VFS, " return simple set mount\n");
return simple_set_mnt(mnt, sb);
P9_DPRINTK(P9_DEBUG_VFS, " simple set mount, return 0\n");
simple_set_mnt(mnt, sb);
return 0;

release_sb:
if (sb) {
Expand Down
3 changes: 2 additions & 1 deletion fs/cifs/cifsfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -606,7 +606,8 @@ cifs_get_sb(struct file_system_type *fs_type,
return rc;
}
sb->s_flags |= MS_ACTIVE;
return simple_set_mnt(mnt, sb);
simple_set_mnt(mnt, sb);
return 0;
}

static ssize_t cifs_file_aio_write(struct kiocb *iocb, const struct iovec *iov,
Expand Down
3 changes: 2 additions & 1 deletion fs/devpts/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -454,7 +454,8 @@ static int get_init_pts_sb(struct file_system_type *fs_type, int flags,
s->s_flags |= MS_ACTIVE;
}
do_remount_sb(s, flags, data, 0);
return simple_set_mnt(mnt, s);
simple_set_mnt(mnt, s);
return 0;
}

/*
Expand Down
3 changes: 2 additions & 1 deletion fs/libfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -242,7 +242,8 @@ int get_sb_pseudo(struct file_system_type *fs_type, char *name,
d_instantiate(dentry, root);
s->s_root = dentry;
s->s_flags |= MS_ACTIVE;
return simple_set_mnt(mnt, s);
simple_set_mnt(mnt, s);
return 0;

Enomem:
up_write(&s->s_umount);
Expand Down
3 changes: 1 addition & 2 deletions fs/namespace.c
Original file line number Diff line number Diff line change
Expand Up @@ -397,11 +397,10 @@ static void __mnt_unmake_readonly(struct vfsmount *mnt)
spin_unlock(&vfsmount_lock);
}

int simple_set_mnt(struct vfsmount *mnt, struct super_block *sb)
void simple_set_mnt(struct vfsmount *mnt, struct super_block *sb)
{
mnt->mnt_sb = sb;
mnt->mnt_root = dget(sb->s_root);
return 0;
}

EXPORT_SYMBOL(simple_set_mnt);
Expand Down
3 changes: 2 additions & 1 deletion fs/proc/root.c
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,8 @@ static int proc_get_sb(struct file_system_type *fs_type,
ns->proc_mnt = mnt;
}

return simple_set_mnt(mnt, sb);
simple_set_mnt(mnt, sb);
return 0;
}

static void proc_kill_sb(struct super_block *sb)
Expand Down
9 changes: 6 additions & 3 deletions fs/super.c
Original file line number Diff line number Diff line change
Expand Up @@ -831,7 +831,8 @@ int get_sb_bdev(struct file_system_type *fs_type,
bdev->bd_super = s;
}

return simple_set_mnt(mnt, s);
simple_set_mnt(mnt, s);
return 0;

error_s:
error = PTR_ERR(s);
Expand Down Expand Up @@ -877,7 +878,8 @@ int get_sb_nodev(struct file_system_type *fs_type,
return error;
}
s->s_flags |= MS_ACTIVE;
return simple_set_mnt(mnt, s);
simple_set_mnt(mnt, s);
return 0;
}

EXPORT_SYMBOL(get_sb_nodev);
Expand Down Expand Up @@ -909,7 +911,8 @@ int get_sb_single(struct file_system_type *fs_type,
s->s_flags |= MS_ACTIVE;
}
do_remount_sb(s, flags, data, 0);
return simple_set_mnt(mnt, s);
simple_set_mnt(mnt, s);
return 0;
}

EXPORT_SYMBOL(get_sb_single);
Expand Down
3 changes: 2 additions & 1 deletion fs/ubifs/super.c
Original file line number Diff line number Diff line change
Expand Up @@ -2034,7 +2034,8 @@ static int ubifs_get_sb(struct file_system_type *fs_type, int flags,
/* 'fill_super()' opens ubi again so we must close it here */
ubi_close_volume(ubi);

return simple_set_mnt(mnt, sb);
simple_set_mnt(mnt, sb);
return 0;

out_deact:
up_write(&sb->s_umount);
Expand Down
2 changes: 1 addition & 1 deletion include/linux/fs.h
Original file line number Diff line number Diff line change
Expand Up @@ -1719,7 +1719,7 @@ struct super_block *sget(struct file_system_type *type,
extern int get_sb_pseudo(struct file_system_type *, char *,
const struct super_operations *ops, unsigned long,
struct vfsmount *mnt);
extern int simple_set_mnt(struct vfsmount *mnt, struct super_block *sb);
extern void simple_set_mnt(struct vfsmount *mnt, struct super_block *sb);
int __put_super_and_need_restart(struct super_block *sb);

/* Alas, no aliases. Too much hassle with bringing module.h everywhere */
Expand Down
3 changes: 2 additions & 1 deletion kernel/cgroup.c
Original file line number Diff line number Diff line change
Expand Up @@ -1071,7 +1071,8 @@ static int cgroup_get_sb(struct file_system_type *fs_type,
mutex_unlock(&cgroup_mutex);
}

return simple_set_mnt(mnt, sb);
simple_set_mnt(mnt, sb);
return 0;

free_cg_links:
free_cg_links(&tmp_cg_links);
Expand Down

0 comments on commit a3ec947

Please sign in to comment.