aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorSteve French <smfrench@austin.rr.com>2005-04-29 01:41:04 -0400
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-04-29 01:41:04 -0400
commit75cf6bdc52d86ca815f1129529e43f0d904b18d5 (patch)
tree1a2849fe1ee2603a9f8e6c6ccc0d43e73b70e02f /fs
parentf654bac2227adc5c6956405290eeb4f81f09e9ff (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.c2
-rw-r--r--fs/cifs/readdir.c6
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
326ffirst_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}