summaryrefslogtreecommitdiff
path: root/fs/smb/client/cached_dir.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/smb/client/cached_dir.c')
-rw-r--r--fs/smb/client/cached_dir.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/fs/smb/client/cached_dir.c b/fs/smb/client/cached_dir.c
index 9b769a7e192d..361f9529ea8a 100644
--- a/fs/smb/client/cached_dir.c
+++ b/fs/smb/client/cached_dir.c
@@ -299,12 +299,9 @@ replay_again:
}
cfid->cfids = cfids;
- cfids->num_entries++;
- list_add(&cfid->entry, &cfids->entries);
+ cfid->tcon = tcon;
spin_unlock(&cfids->cfid_list_lock);
- pfid = &cfid->fid;
-
/*
* Skip any prefix paths in @path as lookup_noperm_positive_unlocked() ends up
* calling ->lookup() which already adds those through
@@ -332,6 +329,13 @@ replay_again:
cfid->tcon = tcon;
dentry = NULL;
+ spin_lock(&cfids->cfid_list_lock);
+ cfids->num_entries++;
+ list_add(&cfid->entry, &cfids->entries);
+ spin_unlock(&cfids->cfid_list_lock);
+
+ pfid = &cfid->fid;
+
/*
* We do not hold the lock for the open because in case
* SMB2_open needs to reconnect.