diff options
Diffstat (limited to 'fs/statfs.c')
| -rw-r--r-- | fs/statfs.c | 21 | 
1 files changed, 13 insertions, 8 deletions
diff --git a/fs/statfs.c b/fs/statfs.c index 9cf04a11896..2aa6a22e0be 100644 --- a/fs/statfs.c +++ b/fs/statfs.c @@ -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;  |