diff options
author | Ingo Molnar <mingo@kernel.org> | 2012-07-18 05:17:17 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2012-07-18 05:17:17 -0400 |
commit | a2fe194723f6e4990d01d8c208c7b138fd410522 (patch) | |
tree | 7aee93fa8f4ba1e18b56fa7d8eab75d249fc6966 /fs/cifs/connect.c | |
parent | c3b7cdf180090d2686239a75bb0ae408108ed749 (diff) | |
parent | a018540141a931f5299a866907b27886916b4374 (diff) |
Merge branch 'linus' into perf/core
Pick up the latest ring-buffer fixes, before applying a new fix.
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'fs/cifs/connect.c')
-rw-r--r-- | fs/cifs/connect.c | 41 |
1 files changed, 20 insertions, 21 deletions
diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c index 78db68a5cf44..0ae86ddf2213 100644 --- a/fs/cifs/connect.c +++ b/fs/cifs/connect.c | |||
@@ -1653,24 +1653,26 @@ cifs_parse_mount_options(const char *mountdata, const char *devname, | |||
1653 | * If yes, we have encountered a double deliminator | 1653 | * If yes, we have encountered a double deliminator |
1654 | * reset the NULL character to the deliminator | 1654 | * reset the NULL character to the deliminator |
1655 | */ | 1655 | */ |
1656 | if (tmp_end < end && tmp_end[1] == delim) | 1656 | if (tmp_end < end && tmp_end[1] == delim) { |
1657 | tmp_end[0] = delim; | 1657 | tmp_end[0] = delim; |
1658 | 1658 | ||
1659 | /* Keep iterating until we get to a single deliminator | 1659 | /* Keep iterating until we get to a single |
1660 | * OR the end | 1660 | * deliminator OR the end |
1661 | */ | 1661 | */ |
1662 | while ((tmp_end = strchr(tmp_end, delim)) != NULL && | 1662 | while ((tmp_end = strchr(tmp_end, delim)) |
1663 | (tmp_end[1] == delim)) { | 1663 | != NULL && (tmp_end[1] == delim)) { |
1664 | tmp_end = (char *) &tmp_end[2]; | 1664 | tmp_end = (char *) &tmp_end[2]; |
1665 | } | 1665 | } |
1666 | 1666 | ||
1667 | /* Reset var options to point to next element */ | 1667 | /* Reset var options to point to next element */ |
1668 | if (tmp_end) { | 1668 | if (tmp_end) { |
1669 | tmp_end[0] = '\0'; | 1669 | tmp_end[0] = '\0'; |
1670 | options = (char *) &tmp_end[1]; | 1670 | options = (char *) &tmp_end[1]; |
1671 | } else | 1671 | } else |
1672 | /* Reached the end of the mount option string */ | 1672 | /* Reached the end of the mount option |
1673 | options = end; | 1673 | * string */ |
1674 | options = end; | ||
1675 | } | ||
1674 | 1676 | ||
1675 | /* Now build new password string */ | 1677 | /* Now build new password string */ |
1676 | temp_len = strlen(value); | 1678 | temp_len = strlen(value); |
@@ -3493,18 +3495,15 @@ cifs_negotiate_rsize(struct cifs_tcon *tcon, struct smb_vol *pvolume_info) | |||
3493 | * 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 |
3494 | * bufsize for reads, testing against win98se shows that it throws | 3496 | * bufsize for reads, testing against win98se shows that it throws |
3495 | * 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. | ||
3496 | * | 3499 | * |
3497 | * 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 |
3498 | * 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. |
3499 | * | ||
3500 | * FIXME: Is there a better heuristic for this? | ||
3501 | */ | 3502 | */ |
3502 | if (tcon->unix_ext && (unix_cap & CIFS_UNIX_LARGE_READ_CAP)) | 3503 | if (tcon->unix_ext && (unix_cap & CIFS_UNIX_LARGE_READ_CAP)) |
3503 | defsize = CIFS_DEFAULT_IOSIZE; | 3504 | defsize = CIFS_DEFAULT_IOSIZE; |
3504 | else if (server->capabilities & CAP_LARGE_READ_X) | 3505 | else if (server->capabilities & CAP_LARGE_READ_X) |
3505 | defsize = CIFS_DEFAULT_NON_POSIX_RSIZE; | 3506 | defsize = CIFS_DEFAULT_NON_POSIX_RSIZE; |
3506 | else if (server->maxBuf >= PAGE_CACHE_SIZE) | ||
3507 | defsize = CIFSMaxBufSize; | ||
3508 | else | 3507 | else |
3509 | defsize = server->maxBuf - sizeof(READ_RSP); | 3508 | defsize = server->maxBuf - sizeof(READ_RSP); |
3510 | 3509 | ||