Skip to content

Commit 5be58af

Browse files
committed
Use kmap_local_page instead of kmap_atomic
Changed zfs_k(un)map_atomic_temp to zfs_k(un)map_temp Signed-off-by: Jason Lee <[email protected]>
1 parent fd51786 commit 5be58af

File tree

5 files changed

+41
-10
lines changed

5 files changed

+41
-10
lines changed

config/kernel-kmap-local-page.m4

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
dnl #
2+
dnl # 5.11 API change
3+
dnl # kmap_atomic() was deprecated in favor of kmap_local_page()
4+
dnl #
5+
AC_DEFUN([ZFS_AC_KERNEL_SRC_KMAP_LOCAL_PAGE], [
6+
ZFS_LINUX_TEST_SRC([kmap_local_page], [
7+
#include <linux/highmem.h>
8+
],[
9+
struct page page;
10+
kmap_local_page(&page);
11+
])
12+
])
13+
14+
AC_DEFUN([ZFS_AC_KERNEL_KMAP_LOCAL_PAGE], [
15+
AC_MSG_CHECKING([whether kmap_local_page exists])
16+
ZFS_LINUX_TEST_RESULT([kmap_local_page], [
17+
AC_MSG_RESULT(yes)
18+
AC_DEFINE(HAVE_KMAP_LOCAL_PAGE, 1,
19+
[kernel has kmap_local_page])
20+
],[
21+
AC_MSG_RESULT(no)
22+
])
23+
])

config/kernel.m4

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_SRC], [
125125
ZFS_AC_KERNEL_SRC_VFS_DEDUPE_FILE_RANGE
126126
ZFS_AC_KERNEL_SRC_VFS_FILE_OPERATIONS_EXTEND
127127
ZFS_AC_KERNEL_SRC_KMAP_ATOMIC_ARGS
128+
ZFS_AC_KERNEL_SRC_KMAP_LOCAL_PAGE
128129
ZFS_AC_KERNEL_SRC_FOLLOW_DOWN_ONE
129130
ZFS_AC_KERNEL_SRC_MAKE_REQUEST_FN
130131
ZFS_AC_KERNEL_SRC_GENERIC_IO_ACCT
@@ -276,6 +277,7 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_RESULT], [
276277
ZFS_AC_KERNEL_VFS_DEDUPE_FILE_RANGE
277278
ZFS_AC_KERNEL_VFS_FILE_OPERATIONS_EXTEND
278279
ZFS_AC_KERNEL_KMAP_ATOMIC_ARGS
280+
ZFS_AC_KERNEL_KMAP_LOCAL_PAGE
279281
ZFS_AC_KERNEL_FOLLOW_DOWN_ONE
280282
ZFS_AC_KERNEL_MAKE_REQUEST_FN
281283
ZFS_AC_KERNEL_GENERIC_IO_ACCT

include/os/linux/kernel/linux/kmap_compat.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,15 @@
2929
#include <linux/highmem.h>
3030
#include <linux/uaccess.h>
3131

32+
#ifdef HAVE_KMAP_LOCAL_PAGE
33+
/* 5.11 API change */
34+
#define zfs_kmap_temp(page) kmap_local_page(page)
35+
#define zfs_kunmap_temp(addr) kunmap_local(addr)
36+
#else
3237
/* 2.6.37 API change */
33-
#define zfs_kmap_atomic(page) kmap_atomic(page)
34-
#define zfs_kunmap_atomic(addr) kunmap_atomic(addr)
38+
#define zfs_kmap_temp(page) kmap_atomic(page)
39+
#define zfs_kunmap_temp(addr) kunmap_atomic(addr)
40+
#endif
3541

3642
/* 5.0 API change - no more 'type' argument for access_ok() */
3743
#ifdef HAVE_ACCESS_OK_TYPE

module/os/linux/zfs/abd_os.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -526,8 +526,8 @@ abd_alloc_zero_scatter(void)
526526
#define PAGE_SHIFT (highbit64(PAGESIZE)-1)
527527
#endif
528528

529-
#define zfs_kmap_atomic(chunk) ((void *)chunk)
530-
#define zfs_kunmap_atomic(addr) do { (void)(addr); } while (0)
529+
#define zfs_kmap_temp(chunk) ((void *)chunk)
530+
#define zfs_kunmap_temp(addr) do { (void)(addr); } while (0)
531531
#define local_irq_save(flags) do { (void)(flags); } while (0)
532532
#define local_irq_restore(flags) do { (void)(flags); } while (0)
533533
#define nth_page(pg, i) \
@@ -980,7 +980,7 @@ abd_iter_map(struct abd_iter *aiter)
980980
aiter->iter_mapsize = MIN(aiter->iter_sg->length - offset,
981981
aiter->iter_abd->abd_size - aiter->iter_pos);
982982

983-
paddr = zfs_kmap_atomic(sg_page(aiter->iter_sg));
983+
paddr = zfs_kmap_temp(sg_page(aiter->iter_sg));
984984
}
985985

986986
aiter->iter_mapaddr = (char *)paddr + offset;
@@ -999,7 +999,7 @@ abd_iter_unmap(struct abd_iter *aiter)
999999

10001000
if (!abd_is_linear(aiter->iter_abd)) {
10011001
/* LINTED E_FUNC_SET_NOT_USED */
1002-
zfs_kunmap_atomic(aiter->iter_mapaddr - aiter->iter_offset);
1002+
zfs_kunmap_temp(aiter->iter_mapaddr - aiter->iter_offset);
10031003
}
10041004

10051005
ASSERT3P(aiter->iter_mapaddr, !=, NULL);

module/os/linux/zfs/zfs_uio.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -136,15 +136,15 @@ zfs_uiomove_bvec_impl(void *p, size_t n, zfs_uio_rw_t rw, zfs_uio_t *uio)
136136
void *paddr;
137137
cnt = MIN(bv->bv_len - skip, n);
138138

139-
paddr = zfs_kmap_atomic(bv->bv_page);
139+
paddr = zfs_kmap_temp(bv->bv_page);
140140
if (rw == UIO_READ) {
141141
/* Copy from buffer 'p' to the bvec data */
142142
memcpy(paddr + bv->bv_offset + skip, p, cnt);
143143
} else {
144144
/* Copy from bvec data to buffer 'p' */
145145
memcpy(p, paddr + bv->bv_offset + skip, cnt);
146146
}
147-
zfs_kunmap_atomic(paddr);
147+
zfs_kunmap_temp(paddr);
148148

149149
skip += cnt;
150150
if (skip == bv->bv_len) {
@@ -168,15 +168,15 @@ zfs_copy_bvec(void *p, size_t skip, size_t cnt, zfs_uio_rw_t rw,
168168
{
169169
void *paddr;
170170

171-
paddr = zfs_kmap_atomic(bv->bv_page);
171+
paddr = zfs_kmap_temp(bv->bv_page);
172172
if (rw == UIO_READ) {
173173
/* Copy from buffer 'p' to the bvec data */
174174
memcpy(paddr + bv->bv_offset + skip, p, cnt);
175175
} else {
176176
/* Copy from bvec data to buffer 'p' */
177177
memcpy(p, paddr + bv->bv_offset + skip, cnt);
178178
}
179-
zfs_kunmap_atomic(paddr);
179+
zfs_kunmap_temp(paddr);
180180
}
181181

182182
/*

0 commit comments

Comments
 (0)