• Steve French's avatar
    [CIFS] don't explicitly do a FindClose on rewind when directory search has ended · 77c57ec8
    Steve French authored
    Do the following series of operations on a CIFS share:
    
        opendir(dir)
        readdir(dir)
        unlink(file in dir)
        rewinddir(dir)
        readdir(dir)
    
    If the readdir read all entries in the directory this will make CIFS throw an error like this:
    
         CIFS VFS: Send error in FindClose = -9
    
    CIFS requests "Close at end of search" of the server by setting this bit when issuing FindFirst or FindNext.  Therefore when all search entries are returned, the server may return "end of search" and close the search implicitly when this bit is set by the client on the request.  We check for this when a readdir is explicitly closed - but when the client notices that a directory has changed after the last operation, we attempt to close the directory before reopening by reissuing a second FindFirst. But, the directory may already been implicitly closed (due to end of search) because the first readdir finished. So we only want to issue a FindClose call in this case when we don't expect it to already be closed.
    Signed-off-by: default avatarJeff Layton <jlayton@redhat.com>
    Signed-off-by: default avatarSteve French <sfrench@us.ibm.com>
    77c57ec8
readdir.c 34.5 KB