Re: [PATCH v6 3/7] kernfs: use VFS negative dentry caching
From: Ian Kent <raven@themaw.net>
Date: 2021-06-12 01:08:17
Also in:
lkml
On Sat, 2021-06-12 at 08:43 +0800, Ian Kent wrote:
On Sat, 2021-06-12 at 00:07 +0000, Al Viro wrote:quoted
On Wed, Jun 09, 2021 at 04:50:27PM +0800, Ian Kent wrote:quoted
+ if (d_really_is_negative(dentry)) { + struct dentry *d_parent = dget_parent(dentry); + struct kernfs_node *parent;What the hell is dget_parent() for? You don't do anything blocking here, so why not simply grab dentry->d_lock - that'll stabilize the value of ->d_parent just fine. Just don't forget to drop the lock before returning and that's it...Thanks Al, I'll change it.
But if I change to take the read lock to ensure there's no operation in progress for the revision check I would need the dget_parent(), yes?
quoted
quoted
+ /* If the kernfs parent node has changed discard and + * proceed to ->lookup. + */ + parent = kernfs_dentry_node(d_parent); + if (parent) { + if (kernfs_dir_changed(parent, dentry)) { + dput(d_parent); + return 0; + } + } + dput(d_parent); + + /* The kernfs node doesn't exist, leave the dentry + * negative and return success. + */ + return 1; + }