From 856f257085bd3e1e6c4acc99cacff8e43c824b7f Mon Sep 17 00:00:00 2001 From: Zach Brown Date: Mon, 9 Oct 2017 09:55:51 -0700 Subject: [PATCH] scoutfs: used locked getattr for all inodes We only set the .getattr method to our locked getattr filler for regular files. Set it for all files so that stat, etc, will see the current inode for all file types. Signed-off-by: Zach Brown --- kmod/src/dir.c | 2 ++ kmod/src/inode.c | 7 +++---- kmod/src/inode.h | 2 ++ 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/kmod/src/dir.c b/kmod/src/dir.c index ac5aebd4..8522f945 100644 --- a/kmod/src/dir.c +++ b/kmod/src/dir.c @@ -986,6 +986,7 @@ const struct inode_operations scoutfs_symlink_iops = { .readlink = generic_readlink, .follow_link = scoutfs_follow_link, .put_link = scoutfs_put_link, + .getattr = scoutfs_getattr, .setxattr = scoutfs_setxattr, .getxattr = scoutfs_getxattr, .listxattr = scoutfs_listxattr, @@ -1637,6 +1638,7 @@ const struct inode_operations scoutfs_dir_iops = { .unlink = scoutfs_unlink, .rmdir = scoutfs_unlink, .rename = scoutfs_rename, + .getattr = scoutfs_getattr, .setxattr = scoutfs_setxattr, .getxattr = scoutfs_getxattr, .listxattr = scoutfs_listxattr, diff --git a/kmod/src/inode.c b/kmod/src/inode.c index 5d10ef7f..be8bbee0 100644 --- a/kmod/src/inode.c +++ b/kmod/src/inode.c @@ -66,8 +66,6 @@ struct inode_sb_info { struct inode_sb_info *name = SCOUTFS_SB(sb)->inode_sb_info static struct kmem_cache *scoutfs_inode_cachep; -static int scoutfs_getattr(struct vfsmount *mnt, struct dentry *dentry, - struct kstat *stat); /* * This is called once before all the allocations and frees of a inode @@ -162,6 +160,7 @@ static const struct inode_operations scoutfs_file_iops = { }; static const struct inode_operations scoutfs_special_iops = { + .getattr = scoutfs_getattr, .setxattr = scoutfs_setxattr, .getxattr = scoutfs_getxattr, .listxattr = scoutfs_listxattr, @@ -309,8 +308,8 @@ void scoutfs_inode_init_key(struct scoutfs_key_buf *key, scoutfs_key_init(key, ikey, sizeof(struct scoutfs_inode_key)); } -static int scoutfs_getattr(struct vfsmount *mnt, struct dentry *dentry, - struct kstat *stat) +int scoutfs_getattr(struct vfsmount *mnt, struct dentry *dentry, + struct kstat *stat) { struct inode *inode = dentry->d_inode; struct super_block *sb = inode->i_sb; diff --git a/kmod/src/inode.h b/kmod/src/inode.h index 1e0b4f5e..be47ddb0 100644 --- a/kmod/src/inode.h +++ b/kmod/src/inode.h @@ -93,6 +93,8 @@ u64 scoutfs_inode_data_version(struct inode *inode); int scoutfs_inode_refresh(struct inode *inode, struct scoutfs_lock *lock, int flags); +int scoutfs_getattr(struct vfsmount *mnt, struct dentry *dentry, + struct kstat *stat); int scoutfs_scan_orphans(struct super_block *sb);