From f86e00f42c13f4e0c84c95303545514ffc3c4698 Mon Sep 17 00:00:00 2001 From: Suresh Jayaraman Date: Fri, 1 Oct 2010 21:23:33 +0530 Subject: [PATCH] --- yaml --- r: 213429 b: refs/heads/master c: 6221ddd0f5e2ddc1d5d928119a2cde033d16f96d h: refs/heads/master i: 213427: 70458913c5a132267fa0aefcfc5851e9dde2b74a v: v3 --- [refs] | 2 +- trunk/fs/cifs/readdir.c | 19 +++++++++++-------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/[refs] b/[refs] index fab5e4bff4c3..cb9ac8407f0e 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 5d0d28824c76409f0d1a645bf0ae81318c8ffa42 +refs/heads/master: 6221ddd0f5e2ddc1d5d928119a2cde033d16f96d diff --git a/trunk/fs/cifs/readdir.c b/trunk/fs/cifs/readdir.c index 1f0bd0f972d4..6f3d13ff9470 100644 --- a/trunk/fs/cifs/readdir.c +++ b/trunk/fs/cifs/readdir.c @@ -790,6 +790,17 @@ int cifs_readdir(struct file *file, void *direntry, filldir_t filldir) cifs_sb = CIFS_SB(file->f_path.dentry->d_sb); + /* + * Ensure FindFirst doesn't fail before doing filldir() for '.' and + * '..'. Otherwise we won't be able to notify VFS in case of failure. + */ + if (file->private_data == NULL) { + rc = initiate_cifs_search(xid, file); + cFYI(1, "initiate cifs search rc %d", rc); + if (rc) + goto rddir2_exit; + } + switch ((int) file->f_pos) { case 0: if (filldir(direntry, ".", 1, file->f_pos, @@ -813,14 +824,6 @@ int cifs_readdir(struct file *file, void *direntry, filldir_t filldir) if it before then restart search if after then keep searching till find it */ - if (file->private_data == NULL) { - rc = initiate_cifs_search(xid, file); - cFYI(1, "initiate cifs search rc %d", rc); - if (rc) { - FreeXid(xid); - return rc; - } - } if (file->private_data == NULL) { rc = -EINVAL; FreeXid(xid);