Messages in this thread | | | Subject | Re: [PATCH v6 3/7] kernfs: use VFS negative dentry caching | From | Ian Kent <> | Date | Sat, 12 Jun 2021 09:08:05 +0800 |
| |
On Sat, 2021-06-12 at 08:43 +0800, Ian Kent wrote: > On Sat, 2021-06-12 at 00:07 +0000, Al Viro wrote: > > On Wed, Jun 09, 2021 at 04:50:27PM +0800, Ian Kent wrote: > > > > > + 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?
> > > > > > + /* 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; > > > + } >
| |