diff options
author | Steve French <smfrench@austin.rr.com> | 2005-04-29 01:41:04 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-29 01:41:04 -0400 |
commit | 75cf6bdc52d86ca815f1129529e43f0d904b18d5 (patch) | |
tree | 1a2849fe1ee2603a9f8e6c6ccc0d43e73b70e02f /fs | |
parent | f654bac2227adc5c6956405290eeb4f81f09e9ff (diff) |
[PATCH] cifs: Gracefully turn off serverino (when serverino is enabled on mount)
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>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/cifs/netmisc.c | 2 | ||||
-rw-r--r-- | fs/cifs/readdir.c | 6 |
2 files changed, 7 insertions, 1 deletions
diff --git a/fs/cifs/netmisc.c b/fs/cifs/netmisc.c index 4e34c89cec5d..dfaabc8d8fb6 100644 --- a/fs/cifs/netmisc.c +++ b/fs/cifs/netmisc.c | |||
@@ -206,7 +206,7 @@ static const struct { | |||
206 | { | 206 | { |
207 | ERRDOS, ERRgeneral, NT_STATUS_UNSUCCESSFUL}, { | 207 | ERRDOS, ERRgeneral, NT_STATUS_UNSUCCESSFUL}, { |
208 | ERRDOS, ERRbadfunc, NT_STATUS_NOT_IMPLEMENTED}, { | 208 | ERRDOS, ERRbadfunc, NT_STATUS_NOT_IMPLEMENTED}, { |
209 | ERRDOS, 87, NT_STATUS_INVALID_INFO_CLASS}, { | 209 | ERRDOS, ERRinvlevel, NT_STATUS_INVALID_INFO_CLASS}, { |
210 | ERRDOS, 24, NT_STATUS_INFO_LENGTH_MISMATCH}, { | 210 | ERRDOS, 24, NT_STATUS_INFO_LENGTH_MISMATCH}, { |
211 | ERRHRD, ERRgeneral, NT_STATUS_ACCESS_VIOLATION}, { | 211 | ERRHRD, ERRgeneral, NT_STATUS_ACCESS_VIOLATION}, { |
212 | ERRHRD, ERRgeneral, NT_STATUS_IN_PAGE_ERROR}, { | 212 | ERRHRD, ERRgeneral, NT_STATUS_IN_PAGE_ERROR}, { |
diff --git a/fs/cifs/readdir.c b/fs/cifs/readdir.c index f8bea395ec9e..07838a5ba3a1 100644 --- a/fs/cifs/readdir.c +++ b/fs/cifs/readdir.c | |||
@@ -323,6 +323,7 @@ static int initiate_cifs_search(const int xid, struct file *file) | |||
323 | 323 | ||
324 | cFYI(1, ("Full path: %s start at: %lld ", full_path, file->f_pos)); | 324 | cFYI(1, ("Full path: %s start at: %lld ", full_path, file->f_pos)); |
325 | 325 | ||
326 | ffirst_retry: | ||
326 | /* test for Unix extensions */ | 327 | /* test for Unix extensions */ |
327 | if (pTcon->ses->capabilities & CAP_UNIX) { | 328 | if (pTcon->ses->capabilities & CAP_UNIX) { |
328 | cifsFile->srch_inf.info_level = SMB_FIND_FILE_UNIX; | 329 | cifsFile->srch_inf.info_level = SMB_FIND_FILE_UNIX; |
@@ -336,6 +337,11 @@ static int initiate_cifs_search(const int xid, struct file *file) | |||
336 | &cifsFile->netfid, &cifsFile->srch_inf); | 337 | &cifsFile->netfid, &cifsFile->srch_inf); |
337 | if(rc == 0) | 338 | if(rc == 0) |
338 | cifsFile->invalidHandle = FALSE; | 339 | cifsFile->invalidHandle = FALSE; |
340 | if((rc == -EOPNOTSUPP) && | ||
341 | (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM)) { | ||
342 | cifs_sb->mnt_cifs_flags &= ~CIFS_MOUNT_SERVER_INUM; | ||
343 | goto ffirst_retry; | ||
344 | } | ||
339 | kfree(full_path); | 345 | kfree(full_path); |
340 | return rc; | 346 | return rc; |
341 | } | 347 | } |