diff options
Diffstat (limited to 'fs/smb/client/readdir.c')
-rw-r--r-- | fs/smb/client/readdir.c | 15 |
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, ¤t_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) { |