diff options
Diffstat (limited to 'fs/cifs/connect.c')
-rw-r--r-- | fs/cifs/connect.c | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c index 5b3840725d01..0ae86ddf2213 100644 --- a/fs/cifs/connect.c +++ b/fs/cifs/connect.c | |||
@@ -3495,18 +3495,15 @@ cifs_negotiate_rsize(struct cifs_tcon *tcon, struct smb_vol *pvolume_info) | |||
3495 | * MS-CIFS indicates that servers are only limited by the client's | 3495 | * MS-CIFS indicates that servers are only limited by the client's |
3496 | * bufsize for reads, testing against win98se shows that it throws | 3496 | * bufsize for reads, testing against win98se shows that it throws |
3497 | * INVALID_PARAMETER errors if you try to request too large a read. | 3497 | * INVALID_PARAMETER errors if you try to request too large a read. |
3498 | * OS/2 just sends back short reads. | ||
3498 | * | 3499 | * |
3499 | * If the server advertises a MaxBufferSize of less than one page, | 3500 | * If the server doesn't advertise CAP_LARGE_READ_X, then assume that |
3500 | * assume that it also can't satisfy reads larger than that either. | 3501 | * it can't handle a read request larger than its MaxBufferSize either. |
3501 | * | ||
3502 | * FIXME: Is there a better heuristic for this? | ||
3503 | */ | 3502 | */ |
3504 | if (tcon->unix_ext && (unix_cap & CIFS_UNIX_LARGE_READ_CAP)) | 3503 | if (tcon->unix_ext && (unix_cap & CIFS_UNIX_LARGE_READ_CAP)) |
3505 | defsize = CIFS_DEFAULT_IOSIZE; | 3504 | defsize = CIFS_DEFAULT_IOSIZE; |
3506 | else if (server->capabilities & CAP_LARGE_READ_X) | 3505 | else if (server->capabilities & CAP_LARGE_READ_X) |
3507 | defsize = CIFS_DEFAULT_NON_POSIX_RSIZE; | 3506 | defsize = CIFS_DEFAULT_NON_POSIX_RSIZE; |
3508 | else if (server->maxBuf >= PAGE_CACHE_SIZE) | ||
3509 | defsize = CIFSMaxBufSize; | ||
3510 | else | 3507 | else |
3511 | defsize = server->maxBuf - sizeof(READ_RSP); | 3508 | defsize = server->maxBuf - sizeof(READ_RSP); |
3512 | 3509 | ||