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: d406d26745 ("cifs: skip alloc when request has no pages")
Reviewed-by: Paulo Alcantara <pc@cjr.nz>
Reviewed-by: "Fabio M. De Francesco" <fmdefrancesco@gmail.com>
Cc: linux-cifs@vger.kernel.org
Cc: samba-technical@lists.samba.org
Signed-off-by: Ira Weiny <ira.weiny@intel.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
This commit is contained in:
Ira Weiny 2022-12-29 14:04:46 -08:00 committed by Steve French
parent 88603b6dc4
commit 67fcb2c598

View File

@ -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);
}
}