From 86219797cd1c0289aade1c6139a2bc3d1ba95eb7 Mon Sep 17 00:00:00 2001 From: Erez Zadok Date: Tue, 19 Nov 2013 17:22:31 -0500 Subject: [PATCH] Wrapfs: implement ->getattr Signed-off-by: Erez Zadok --- fs/wrapfs/inode.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/fs/wrapfs/inode.c b/fs/wrapfs/inode.c index 7c388a710716..989bb70b9ef1 100644 --- a/fs/wrapfs/inode.c +++ b/fs/wrapfs/inode.c @@ -437,11 +437,32 @@ out_err: return err; } +static int wrapfs_getattr(struct vfsmount *mnt, struct dentry *dentry, + struct kstat *stat) +{ + int err; + struct kstat lower_stat; + struct path lower_path; + + wrapfs_get_lower_path(dentry, &lower_path); + err = vfs_getattr(&lower_path, &lower_stat); + if (err) + goto out; + fsstack_copy_attr_all(dentry->d_inode, + lower_path.dentry->d_inode); + generic_fillattr(dentry->d_inode, stat); + stat->blocks = lower_stat.blocks; +out: + wrapfs_put_lower_path(dentry, &lower_path); + return err; +} + const struct inode_operations wrapfs_symlink_iops = { .readlink = wrapfs_readlink, .permission = wrapfs_permission, .follow_link = wrapfs_follow_link, .setattr = wrapfs_setattr, + .getattr = wrapfs_getattr, .put_link = wrapfs_put_link, }; @@ -457,9 +478,11 @@ const struct inode_operations wrapfs_dir_iops = { .rename = wrapfs_rename, .permission = wrapfs_permission, .setattr = wrapfs_setattr, + .getattr = wrapfs_getattr, }; const struct inode_operations wrapfs_main_iops = { .permission = wrapfs_permission, .setattr = wrapfs_setattr, + .getattr = wrapfs_getattr, }; -- 2.43.0