提交 0c7d90cf 编写于 作者: D David Howells 提交者: Trond Myklebust

NFS: Use the dentry superblock directly in nfs_statfs()

Use the nominated dentry's superblock directly in the NFS statfs() op to get a
file handle, rather than using s_root (which will become a dummy dentry in a
future patch).
Signed-Off-By: NDavid Howells <dhowells@redhat.com>
Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
上级 24c8dbbb
...@@ -240,11 +240,10 @@ void __exit unregister_nfs_fs(void) ...@@ -240,11 +240,10 @@ void __exit unregister_nfs_fs(void)
*/ */
static int nfs_statfs(struct dentry *dentry, struct kstatfs *buf) static int nfs_statfs(struct dentry *dentry, struct kstatfs *buf)
{ {
struct super_block *sb = dentry->d_sb; struct nfs_server *server = NFS_SB(dentry->d_sb);
struct nfs_server *server = NFS_SB(sb);
unsigned char blockbits; unsigned char blockbits;
unsigned long blockres; unsigned long blockres;
struct nfs_fh *rootfh = NFS_FH(sb->s_root->d_inode); struct nfs_fh *fh = NFS_FH(dentry->d_inode);
struct nfs_fattr fattr; struct nfs_fattr fattr;
struct nfs_fsstat res = { struct nfs_fsstat res = {
.fattr = &fattr, .fattr = &fattr,
...@@ -253,7 +252,7 @@ static int nfs_statfs(struct dentry *dentry, struct kstatfs *buf) ...@@ -253,7 +252,7 @@ static int nfs_statfs(struct dentry *dentry, struct kstatfs *buf)
lock_kernel(); lock_kernel();
error = server->rpc_ops->statfs(server, rootfh, &res); error = server->rpc_ops->statfs(server, fh, &res);
buf->f_type = NFS_SUPER_MAGIC; buf->f_type = NFS_SUPER_MAGIC;
if (error < 0) if (error < 0)
goto out_err; goto out_err;
...@@ -263,7 +262,7 @@ static int nfs_statfs(struct dentry *dentry, struct kstatfs *buf) ...@@ -263,7 +262,7 @@ static int nfs_statfs(struct dentry *dentry, struct kstatfs *buf)
* case where f_frsize != f_bsize. Eventually we want to * case where f_frsize != f_bsize. Eventually we want to
* report the value of wtmult in this field. * report the value of wtmult in this field.
*/ */
buf->f_frsize = sb->s_blocksize; buf->f_frsize = dentry->d_sb->s_blocksize;
/* /*
* On most *nix systems, f_blocks, f_bfree, and f_bavail * On most *nix systems, f_blocks, f_bfree, and f_bavail
...@@ -272,8 +271,8 @@ static int nfs_statfs(struct dentry *dentry, struct kstatfs *buf) ...@@ -272,8 +271,8 @@ static int nfs_statfs(struct dentry *dentry, struct kstatfs *buf)
* thus historically Linux's sys_statfs reports these * thus historically Linux's sys_statfs reports these
* fields in units of f_bsize. * fields in units of f_bsize.
*/ */
buf->f_bsize = sb->s_blocksize; buf->f_bsize = dentry->d_sb->s_blocksize;
blockbits = sb->s_blocksize_bits; blockbits = dentry->d_sb->s_blocksize_bits;
blockres = (1 << blockbits) - 1; blockres = (1 << blockbits) - 1;
buf->f_blocks = (res.tbytes + blockres) >> blockbits; buf->f_blocks = (res.tbytes + blockres) >> blockbits;
buf->f_bfree = (res.fbytes + blockres) >> blockbits; buf->f_bfree = (res.fbytes + blockres) >> blockbits;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册