[PATCH] cifs: Gracefully turn off serverino (when serverino is enabled on mount)
authorSteve French <smfrench@austin.rr.com>
Fri, 29 Apr 2005 05:41:04 +0000 (22:41 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Fri, 29 Apr 2005 05:41:04 +0000 (22:41 -0700)
Old servers such as NT4 do not support this level of FindFirst (and
retry with a lower infolevel)

Signed-off-by: Steve French (sfrench@us.ibm.com)
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
fs/cifs/netmisc.c
fs/cifs/readdir.c

index 4e34c89cec5dc8e5c975edd10f420161c37652b8..dfaabc8d8fb6ad8caedc34c5a30f4eec3555a0cc 100644 (file)
@@ -206,7 +206,7 @@ static const struct {
        {
        ERRDOS, ERRgeneral, NT_STATUS_UNSUCCESSFUL}, {
        ERRDOS, ERRbadfunc, NT_STATUS_NOT_IMPLEMENTED}, {
-       ERRDOS, 87, NT_STATUS_INVALID_INFO_CLASS}, {
+       ERRDOS, ERRinvlevel, NT_STATUS_INVALID_INFO_CLASS}, {
        ERRDOS, 24, NT_STATUS_INFO_LENGTH_MISMATCH}, {
        ERRHRD, ERRgeneral, NT_STATUS_ACCESS_VIOLATION}, {
        ERRHRD, ERRgeneral, NT_STATUS_IN_PAGE_ERROR}, {
index f8bea395ec9e28aee2f81ed5f0461bc53ee3dc0f..07838a5ba3a1778572a0266335f92a677c347709 100644 (file)
@@ -323,6 +323,7 @@ static int initiate_cifs_search(const int xid, struct file *file)
 
        cFYI(1, ("Full path: %s start at: %lld ", full_path, file->f_pos));
 
+ffirst_retry:
        /* test for Unix extensions */
        if (pTcon->ses->capabilities & CAP_UNIX) {
                cifsFile->srch_inf.info_level = SMB_FIND_FILE_UNIX; 
@@ -336,6 +337,11 @@ static int initiate_cifs_search(const int xid, struct file *file)
                &cifsFile->netfid, &cifsFile->srch_inf); 
        if(rc == 0)
                cifsFile->invalidHandle = FALSE;
+       if((rc == -EOPNOTSUPP) && 
+               (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM)) {
+               cifs_sb->mnt_cifs_flags &= ~CIFS_MOUNT_SERVER_INUM;
+               goto ffirst_retry;
+       }
        kfree(full_path);
        return rc;
 }