vfs: new helper - vfs_ustat()

... and bury user_get_super()/statfs_by_dentry() - they are
purely internal now.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
Al Viro
2012-01-02 22:28:36 -05:00
parent c972b4bc83
commit cf31e70d6c
5 changed files with 17 additions and 26 deletions

View File

@@ -7,6 +7,7 @@
#include <linux/statfs.h>
#include <linux/security.h>
#include <linux/uaccess.h>
#include "internal.h"
static int flags_by_mnt(int mnt_flags)
{
@@ -45,7 +46,7 @@ static int calculate_f_flags(struct vfsmount *mnt)
flags_by_sb(mnt->mnt_sb->s_flags);
}
int statfs_by_dentry(struct dentry *dentry, struct kstatfs *buf)
static int statfs_by_dentry(struct dentry *dentry, struct kstatfs *buf)
{
int retval;
@@ -205,19 +206,23 @@ SYSCALL_DEFINE3(fstatfs64, unsigned int, fd, size_t, sz, struct statfs64 __user
return error;
}
SYSCALL_DEFINE2(ustat, unsigned, dev, struct ustat __user *, ubuf)
int vfs_ustat(dev_t dev, struct kstatfs *sbuf)
{
struct super_block *s;
struct ustat tmp;
struct kstatfs sbuf;
struct super_block *s = user_get_super(dev);
int err;
s = user_get_super(new_decode_dev(dev));
if (!s)
return -EINVAL;
err = statfs_by_dentry(s->s_root, &sbuf);
err = statfs_by_dentry(s->s_root, sbuf);
drop_super(s);
return err;
}
SYSCALL_DEFINE2(ustat, unsigned, dev, struct ustat __user *, ubuf)
{
struct ustat tmp;
struct kstatfs sbuf;
int err = vfs_ustat(new_decode_dev(dev), &sbuf);
if (err)
return err;