Skip to content

Commit 25b4f20

Browse files
neilbrownnamjaejeon
authored andcommitted
smb/server: use lookup_one_unlocked()
In process_query_dir_entries(), instead of locking the directory, performing a lookup, then unlocking, we can simply call lookup_one_unlocked(). That takes locks the directory only when needed. This removes the only users of lock_dir() and unlock_dir() so they can be removed. Signed-off-by: NeilBrown <[email protected]> Signed-off-by: Namjae Jeon <[email protected]>
1 parent 0329cf1 commit 25b4f20

File tree

1 file changed

+8
-6
lines changed

1 file changed

+8
-6
lines changed

smb2pdu.c

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4286,6 +4286,7 @@ struct smb2_query_dir_private {
42864286
int info_level;
42874287
};
42884288

4289+
#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 16, 0)
42894290
static void lock_dir(struct ksmbd_file *dir_fp)
42904291
{
42914292
struct dentry *dir = dir_fp->filp->f_path.dentry;
@@ -4299,6 +4300,7 @@ static void unlock_dir(struct ksmbd_file *dir_fp)
42994300

43004301
inode_unlock(d_inode(dir));
43014302
}
4303+
#endif
43024304

43034305
static int process_query_dir_entries(struct smb2_query_dir_private *priv)
43044306
{
@@ -4318,13 +4320,13 @@ static int process_query_dir_entries(struct smb2_query_dir_private *priv)
43184320
if (dentry_name(priv->d_info, priv->info_level))
43194321
return -EINVAL;
43204322

4321-
lock_dir(priv->dir_fp);
43224323
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 16, 0)
4323-
dent = lookup_one(idmap,
4324-
&QSTR_LEN(priv->d_info->name,
4325-
priv->d_info->name_len),
4326-
priv->dir_fp->filp->f_path.dentry);
4324+
dent = lookup_one_unlocked(idmap,
4325+
&QSTR_LEN(priv->d_info->name,
4326+
priv->d_info->name_len),
4327+
priv->dir_fp->filp->f_path.dentry);
43274328
#else
4329+
lock_dir(priv->dir_fp);
43284330
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 0)
43294331
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 3, 0)
43304332
dent = lookup_one(idmap, priv->d_info->name,
@@ -4337,9 +4339,9 @@ static int process_query_dir_entries(struct smb2_query_dir_private *priv)
43374339
dent = lookup_one_len(priv->d_info->name,
43384340
priv->dir_fp->filp->f_path.dentry,
43394341
priv->d_info->name_len);
4340-
#endif
43414342
#endif
43424343
unlock_dir(priv->dir_fp);
4344+
#endif
43434345

43444346
if (IS_ERR(dent)) {
43454347
ksmbd_debug(SMB, "Cannot lookup `%s' [%ld]\n",

0 commit comments

Comments
 (0)