I may be missing some additional change or proposed future change - but it looks like the patch to add check for null dentry in cifs_get_link causes an extra call to cifs_get_link in pick_link() (in namei.c - see below), so would be slightly slower than leaving code as is in cifs_get_link if (nd->flags & LOOKUP_RCU) { res = get(NULL, inode, &last->done); if (res == ERR_PTR(-ECHILD) && try_to_unlazy(nd)) res = get(link->dentry, inode, &last->done); cifs.ko doesn't use or check the dentry in cifs_get_link since the symlink target is stored in the cifs inode, not accessed via the dentry, so wasn't clear to me from the patch description why we would care if dentry is null in cifs_get_link() On Sat, Feb 3, 2024 at 8:18 PM Al Viro <viro@xxxxxxxxxxxxxxxxxx> wrote: > > ->d_revalidate() bails out there, anyway. It's not enough > to prevent getting into ->get_link() in RCU mode, but that > could happen only in a very contrieved setup. Not worth > trying to do anything fancy here unless ->d_revalidate() > stops kicking out of RCU mode at least in some cases. > > Signed-off-by: Al Viro <viro@xxxxxxxxxxxxxxxxxx> > --- > fs/smb/client/cifsfs.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/fs/smb/client/cifsfs.c b/fs/smb/client/cifsfs.c > index e902de4e475a..630e74628dfe 100644 > --- a/fs/smb/client/cifsfs.c > +++ b/fs/smb/client/cifsfs.c > @@ -1172,6 +1172,9 @@ const char *cifs_get_link(struct dentry *dentry, struct inode *inode, > { > char *target_path; > > + if (!dentry) > + return ERR_PTR(-ECHILD); > + > target_path = kmalloc(PATH_MAX, GFP_KERNEL); > if (!target_path) > return ERR_PTR(-ENOMEM); > -- > 2.39.2 > > -- Thanks, Steve