aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Rosenberg <drosen@google.com>2017-03-09 18:12:16 -0800
committerMister Oyster <oysterized@gmail.com>2017-04-13 12:35:19 +0200
commitbed79fd6bf41dc3f484a30aeb0a91201c286fb6b (patch)
tree1cb72480e4b07169fcfd1be7e6cba096f0177a95
parent4ee3b61ba5405fcc763f57b7073376a2de8e9179 (diff)
ANDROID: sdcardfs: Get the blocksize from the lower fs
This changes sdcardfs to be more in line with the getattr in wrapfs, which calls the lower fs's getattr to get the block size Signed-off-by: Daniel Rosenberg <drosen@google.com> Bug: 34723223 Change-Id: I1c9e16604ba580a8cdefa17f02dcc489d7351aed
-rwxr-xr-xfs/sdcardfs/inode.c21
1 files changed, 9 insertions, 12 deletions
diff --git a/fs/sdcardfs/inode.c b/fs/sdcardfs/inode.c
index d7967cc6d..79b5c67c8 100755
--- a/fs/sdcardfs/inode.c
+++ b/fs/sdcardfs/inode.c
@@ -868,9 +868,7 @@ static int sdcardfs_fillattr(struct vfsmount *mnt, struct inode *inode, struct k
static int sdcardfs_getattr(struct vfsmount *mnt, struct dentry *dentry,
struct kstat *stat)
{
- struct dentry *lower_dentry;
- struct inode *inode;
- struct inode *lower_inode;
+ struct kstat lower_stat;
struct path lower_path;
struct dentry *parent;
int err;
@@ -885,16 +883,15 @@ static int sdcardfs_getattr(struct vfsmount *mnt, struct dentry *dentry,
}
dput(parent);
- inode = dentry->d_inode;
-
sdcardfs_get_lower_path(dentry, &lower_path);
- lower_dentry = lower_path.dentry;
- lower_inode = sdcardfs_lower_inode(inode);
-
- sdcardfs_copy_and_fix_attrs(inode, lower_inode);
- fsstack_copy_inode_size(inode, lower_inode);
-
- err = sdcardfs_fillattr(mnt, inode, stat);
+ err = vfs_getattr(&lower_path, &lower_stat);
+ if (err)
+ goto out;
+ sdcardfs_copy_and_fix_attrs(dentry->d_inode,
+ lower_path.dentry->d_inode);
+ err = sdcardfs_fillattr(mnt, dentry->d_inode, stat);
+ stat->blocks = lower_stat.blocks;
+out:
sdcardfs_put_lower_path(dentry, &lower_path);
return err;
}