Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 064ea1ae authored by Linus Torvalds's avatar Linus Torvalds
Browse files
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
parents 1b74a868 ec01d738
Loading
Loading
Loading
Loading
+20 −21
Original line number Diff line number Diff line
@@ -1653,14 +1653,14 @@ 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
				/* Keep iterating until we get to a single
				 * deliminator OR the end
				 */
			while ((tmp_end = strchr(tmp_end, delim)) != NULL &&
			       (tmp_end[1] == delim)) {
				while ((tmp_end = strchr(tmp_end, delim))
					!= NULL && (tmp_end[1] == delim)) {
						tmp_end = (char *) &tmp_end[2];
				}

@@ -1669,8 +1669,10 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,
					tmp_end[0] = '\0';
					options = (char *) &tmp_end[1];
				} else
				/* Reached the end of the mount option string */
					/* Reached the end of the mount option
					 * string */
					options = end;
			}

			/* Now build new password string */
			temp_len = strlen(value);
@@ -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);