Skip to content

Commit

Permalink
Merge git://git.samba.org/sfrench/cifs-2.6
Browse files Browse the repository at this point in the history
Pull cifs fixes from Steve French.

* git://git.samba.org/sfrench/cifs-2.6:
  cifs: when server doesn't set CAP_LARGE_READ_X, cap default rsize at MaxBufferSize
  cifs: fix parsing of password mount option
  • Loading branch information
torvalds committed Jul 6, 2012
2 parents 1b74a86 + ec01d73 commit 064ea1a
Showing 1 changed file with 20 additions and 21 deletions.
41 changes: 20 additions & 21 deletions fs/cifs/connect.c
Original file line number Diff line number Diff line change
Expand Up @@ -1653,24 +1653,26 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,
* If yes, we have encountered a double deliminator
* reset the NULL character to the deliminator
*/
if (tmp_end < end && tmp_end[1] == delim)
if (tmp_end < end && tmp_end[1] == delim) {
tmp_end[0] = delim;

/* Keep iterating until we get to a single deliminator
* OR the end
*/
while ((tmp_end = strchr(tmp_end, delim)) != NULL &&
(tmp_end[1] == delim)) {
tmp_end = (char *) &tmp_end[2];
}
/* Keep iterating until we get to a single
* deliminator OR the end
*/
while ((tmp_end = strchr(tmp_end, delim))
!= NULL && (tmp_end[1] == delim)) {
tmp_end = (char *) &tmp_end[2];
}

/* Reset var options to point to next element */
if (tmp_end) {
tmp_end[0] = '\0';
options = (char *) &tmp_end[1];
} else
/* Reached the end of the mount option string */
options = end;
/* Reset var options to point to next element */
if (tmp_end) {
tmp_end[0] = '\0';
options = (char *) &tmp_end[1];
} else
/* Reached the end of the mount option
* string */
options = end;
}

/* Now build new password string */
temp_len = strlen(value);
Expand Down Expand Up @@ -3493,18 +3495,15 @@ cifs_negotiate_rsize(struct cifs_tcon *tcon, struct smb_vol *pvolume_info)
* MS-CIFS indicates that servers are only limited by the client's
* bufsize for reads, testing against win98se shows that it throws
* INVALID_PARAMETER errors if you try to request too large a read.
* OS/2 just sends back short reads.
*
* If the server advertises a MaxBufferSize of less than one page,
* assume that it also can't satisfy reads larger than that either.
*
* FIXME: Is there a better heuristic for this?
* If the server doesn't advertise CAP_LARGE_READ_X, then assume that
* it can't handle a read request larger than its MaxBufferSize either.
*/
if (tcon->unix_ext && (unix_cap & CIFS_UNIX_LARGE_READ_CAP))
defsize = CIFS_DEFAULT_IOSIZE;
else if (server->capabilities & CAP_LARGE_READ_X)
defsize = CIFS_DEFAULT_NON_POSIX_RSIZE;
else if (server->maxBuf >= PAGE_CACHE_SIZE)
defsize = CIFSMaxBufSize;
else
defsize = server->maxBuf - sizeof(READ_RSP);

Expand Down

0 comments on commit 064ea1a

Please sign in to comment.