Thread (34 messages) 34 messages, 4 authors, 2021-06-14

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;
+       }
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help