]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
CIFS: fix saving of resume key before CIFSFindNext
authorJeff Layton <sfrench@us.ibm.com>
Thu, 23 Oct 2008 18:05:02 +0000 (18:05 +0000)
committerGreg Kroah-Hartman <gregkh@suse.de>
Sat, 25 Oct 2008 21:32:40 +0000 (14:32 -0700)
commit a364bc0b37f14ffd66c1f982af42990a9d77fa43 upstream

We recently fixed the cifs readdir code so that it saves the resume key
before calling CIFSFindNext. Unfortunately, this assumes that we have
just done a CIFSFindFirst (or FindNext) and have resume info to save.
This isn't necessarily the case. Fix the code to save resume info if we
had to reinitiate the search, and after a FindNext.

This fixes connectathon basic test6 against NetApp filers.

Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Steve French <sfrench@us.ibm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
fs/cifs/readdir.c

index 765adf12d54fa635d594b0ea25033aa51f186b7f..58d57299f2a08c432625f9be298e731e2fa7bae0 100644 (file)
@@ -762,14 +762,15 @@ static int find_cifs_entry(const int xid, struct cifsTconInfo *pTcon,
                                 rc));
                        return rc;
                }
+               cifs_save_resume_key(cifsFile->srch_inf.last_entry, cifsFile);
        }
 
        while ((index_to_find >= cifsFile->srch_inf.index_of_last_entry) &&
              (rc == 0) && !cifsFile->srch_inf.endOfSearch) {
                cFYI(1, ("calling findnext2"));
-               cifs_save_resume_key(cifsFile->srch_inf.last_entry, cifsFile);
                rc = CIFSFindNext(xid, pTcon, cifsFile->netfid,
                                  &cifsFile->srch_inf);
+               cifs_save_resume_key(cifsFile->srch_inf.last_entry, cifsFile);
                if (rc)
                        return -ENOENT;
        }