EXTRA_KCFLAGS="$tmp_flags"
])
+# 3.4 kmap_atomic removes second argument
+# see kernel commit 1ec9c5ddc17aa398f05646abfcbaf315b544e62f
+#
+AC_DEFUN([LC_KMAP_ATOMIC_HAS_1ARG],
+[AC_MSG_CHECKING([if kmap_atomic has only 1 argument])
+LB_LINUX_TRY_COMPILE([
+ #include <linux/highmem.h>
+],[
+ kmap_atomic(NULL);
+],[
+ AC_DEFINE(HAVE_KMAP_ATOMIC_HAS_1ARG, 1,
+ [have kmap_atomic has only 1 argument])
+ AC_MSG_RESULT([yes])
+],[
+ AC_MSG_RESULT([no])
+])
+])
+
#
# 3.4 switchs touch_atime to struct path
# see kernel commit 68ac1234fb949b66941d94dce4157742799fc581
# 3.4
LC_TOUCH_ATIME_1ARG
LC_HAVE_D_MAKE_ROOT
+ LC_KMAP_ATOMIC_HAS_1ARG
#
if test x$enable_server = xyes ; then
#define queue_max_hw_segments(rq) queue_max_segments(rq)
#endif
+#ifdef HAVE_KMAP_ATOMIC_HAS_1ARG
+#define ll_kmap_atomic(a, b) kmap_atomic(a)
+#define ll_kunmap_atomic(a, b) kunmap_atomic(a)
+#else
+#define ll_kmap_atomic(a, b) kmap_atomic(a, b)
+#define ll_kunmap_atomic(a, b) kunmap_atomic(a, b)
+#endif
+
#ifndef HAVE_BI_HW_SEGMENTS
#define bio_hw_segments(q, bio) 0
src_page = (rw == WRITE) ? pages[i] : vmpage;
dst_page = (rw == WRITE) ? vmpage : pages[i];
- src = kmap_atomic(src_page, KM_USER0);
- dst = kmap_atomic(dst_page, KM_USER1);
+ src = ll_kmap_atomic(src_page, KM_USER0);
+ dst = ll_kmap_atomic(dst_page, KM_USER1);
memcpy(dst, src, min(page_size, size));
- kunmap_atomic(dst, KM_USER1);
- kunmap_atomic(src, KM_USER0);
+ ll_kunmap_atomic(dst, KM_USER1);
+ ll_kunmap_atomic(src, KM_USER0);
/* make sure page will be added to the transfer by
* cl_io_submit()->...->vvp_page_prep_write(). */
* purposes here we can treat it like i_size.
*/
if (attr->cat_kms <= offset) {
- char *kaddr = kmap_atomic(cp->cpg_page, KM_USER0);
+ char *kaddr = ll_kmap_atomic(cp->cpg_page, KM_USER0);
memset(kaddr, 0, cl_page_size(obj));
- kunmap_atomic(kaddr, KM_USER0);
+ ll_kunmap_atomic(kaddr, KM_USER0);
} else if (cp->cpg_defer_uptodate)
cp->cpg_ra_used = 1;
else