diff options
| author | Daniel Rosenberg <drosen@google.com> | 2017-03-09 18:12:16 -0800 |
|---|---|---|
| committer | Mister Oyster <oysterized@gmail.com> | 2017-04-13 12:35:19 +0200 |
| commit | bed79fd6bf41dc3f484a30aeb0a91201c286fb6b (patch) | |
| tree | 1cb72480e4b07169fcfd1be7e6cba096f0177a95 | |
| parent | 4ee3b61ba5405fcc763f57b7073376a2de8e9179 (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-x | fs/sdcardfs/inode.c | 21 |
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; } |
