Re: [PATCH 1/4] kernfs: switch kernfs to use an rwsem
From: Ian Kent
Date: Sun Jun 07 2020 - 04:40:49 EST
Hi Greg,
On Mon, 2020-05-25 at 13:47 +0800, Ian Kent wrote:
> @@ -189,9 +189,9 @@ int kernfs_iop_getattr(const struct path *path,
> struct kstat *stat,
> struct inode *inode = d_inode(path->dentry);
> struct kernfs_node *kn = inode->i_private;
>
> - mutex_lock(&kernfs_mutex);
> + down_read(&kernfs_rwsem);
> kernfs_refresh_inode(kn, inode);
> - mutex_unlock(&kernfs_mutex);
> + up_read(&kernfs_rwsem);
>
> generic_fillattr(inode, stat);
> return 0;
> @@ -281,9 +281,9 @@ int kernfs_iop_permission(struct inode *inode,
> int mask)
>
> kn = inode->i_private;
>
> - mutex_lock(&kernfs_mutex);
> + down_read(&kernfs_rwsem);
> kernfs_refresh_inode(kn, inode);
> - mutex_unlock(&kernfs_mutex);
> + up_read(&kernfs_rwsem);
>
> return generic_permission(inode, mask);
> }
I changed these from a write lock to a read lock late in the
development.
But kernfs_refresh_inode() modifies the inode so I think I should
have taken the inode lock as well as taking the read lock.
I'll look again but a second opinion (anyone) would be welcome.
Ian