kernfs: dont take i_lock on inode attr read
The kernfs write lock is held when the kernfs node inode attributes are updated. Therefore, when either kernfs_iop_getattr() or kernfs_iop_permission() are called the kernfs node inode attributes won't change. Consequently concurrent kernfs_refresh_inode() calls always copy the same values from the kernfs node. So there's no need to take the inode i_lock to get consistent values for generic_fillattr() and generic_permission(), the kernfs read lock is sufficient. Cc: Tejun Heo <tj@kernel.org> Signed-off-by: Ian Kent <raven@themaw.net> Link: https://lore.kernel.org/r/166606036215.13363.1288735296954908554.stgit@donald.themaw.net Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
5033ac5c58
commit
aa1d058d48
|
@ -190,10 +190,8 @@ int kernfs_iop_getattr(struct user_namespace *mnt_userns,
|
||||||
struct kernfs_root *root = kernfs_root(kn);
|
struct kernfs_root *root = kernfs_root(kn);
|
||||||
|
|
||||||
down_read(&root->kernfs_rwsem);
|
down_read(&root->kernfs_rwsem);
|
||||||
spin_lock(&inode->i_lock);
|
|
||||||
kernfs_refresh_inode(kn, inode);
|
kernfs_refresh_inode(kn, inode);
|
||||||
generic_fillattr(&init_user_ns, inode, stat);
|
generic_fillattr(&init_user_ns, inode, stat);
|
||||||
spin_unlock(&inode->i_lock);
|
|
||||||
up_read(&root->kernfs_rwsem);
|
up_read(&root->kernfs_rwsem);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -288,10 +286,8 @@ int kernfs_iop_permission(struct user_namespace *mnt_userns,
|
||||||
root = kernfs_root(kn);
|
root = kernfs_root(kn);
|
||||||
|
|
||||||
down_read(&root->kernfs_rwsem);
|
down_read(&root->kernfs_rwsem);
|
||||||
spin_lock(&inode->i_lock);
|
|
||||||
kernfs_refresh_inode(kn, inode);
|
kernfs_refresh_inode(kn, inode);
|
||||||
ret = generic_permission(&init_user_ns, inode, mask);
|
ret = generic_permission(&init_user_ns, inode, mask);
|
||||||
spin_unlock(&inode->i_lock);
|
|
||||||
up_read(&root->kernfs_rwsem);
|
up_read(&root->kernfs_rwsem);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
Loading…
Reference in New Issue