summaryrefslogtreecommitdiff
path: root/fs/smb/client/readdir.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/smb/client/readdir.c')
-rw-r--r--fs/smb/client/readdir.c15
1 files changed, 5 insertions, 10 deletions
diff --git a/fs/smb/client/readdir.c b/fs/smb/client/readdir.c
index b3624057b6b2..72378a930c35 100644
--- a/fs/smb/client/readdir.c
+++ b/fs/smb/client/readdir.c
@@ -1059,16 +1059,12 @@ int cifs_readdir(struct file *file, struct dir_context *ctx)
tcon = tlink_tcon(cifsFile->tlink);
}
- cfid = find_cached_dir(tcon, full_path);
+ cfid = open_cached_dir(xid, tcon, full_path, cifs_sb);
cifs_put_tlink(tlink);
if (IS_ERR(cfid)) {
- rc = PTR_ERR(cfid);
cfid = NULL;
- if (rc == -ENOENT)
- goto cache_not_found;
-
- goto rddir2_exit;
+ goto cache_not_found;
}
mutex_lock(&cfid->dirents.de_mutex);
@@ -1137,13 +1133,12 @@ int cifs_readdir(struct file *file, struct dir_context *ctx)
tcon = tlink_tcon(cifsFile->tlink);
rc = find_cifs_entry(xid, tcon, ctx->pos, file, full_path,
&current_entry, &num_to_fill);
- cfid = find_cached_dir(tcon, full_path);
+ if (!cfid)
+ cfid = open_cached_dir(xid, tcon, full_path, cifs_sb);
+
if (IS_ERR(cfid)) {
rc = PTR_ERR(cfid);
cfid = NULL;
- }
-
- if (rc) {
cifs_dbg(FYI, "fce error %d\n", rc);
goto rddir2_exit;
} else if (current_entry != NULL) {