Commit 67fcb2c5 authored by Ira Weiny's avatar Ira Weiny Committed by Steve French
Browse files

cifs: Fix kmap_local_page() unmapping



kmap_local_page() requires kunmap_local() to unmap the mapping.  In
addition memcpy_page() is provided to perform this common memcpy
pattern.

Replace the kmap_local_page() and broken kunmap() with memcpy_page()

Fixes: d406d267 ("cifs: skip alloc when request has no pages")
Reviewed-by: default avatarPaulo Alcantara <pc@cjr.nz>
Reviewed-by: default avatar"Fabio M. De Francesco" <fmdefrancesco@gmail.com>
Cc: linux-cifs@vger.kernel.org
Cc: samba-technical@lists.samba.org
Signed-off-by: default avatarIra Weiny <ira.weiny@intel.com>
Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
parent 88603b6d
Loading
Loading
Loading
Loading
+2 −7
Original line number Diff line number Diff line
@@ -4488,17 +4488,12 @@ smb3_init_transform_rq(struct TCP_Server_Info *server, int num_rqst,

		/* copy pages form the old */
		for (j = 0; j < npages; j++) {
			char *dst, *src;
			unsigned int offset, len;

			rqst_page_get_length(new, j, &len, &offset);

			dst = kmap_local_page(new->rq_pages[j]) + offset;
			src = kmap_local_page(old->rq_pages[j]) + offset;

			memcpy(dst, src, len);
			kunmap(new->rq_pages[j]);
			kunmap(old->rq_pages[j]);
			memcpy_page(new->rq_pages[j], offset,
				    old->rq_pages[j], offset, len);
		}
	}