]) # LC_FSCRYPT_DUMMY_CONTEXT_ENABLED
#
+# LC_HAVE_KTHREAD_USE_MM
+#
+# kernel 5.8 commit f5678e7f2ac31c270334b936352f0ef2fe7dd2b3
+# kernel: better document the use_mm/unuse_mm API contract
+#
+AC_DEFUN([LC_SRC_HAVE_KTHREAD_USE_MM], [
+ LB2_LINUX_TEST_SRC([kthread_use_mm], [
+ #include <linux/kthread.h>
+ ],[
+ kthread_use_mm(NULL);
+ ])
+])
+AC_DEFUN([LC_HAVE_KTHREAD_USE_MM], [
+ AC_MSG_CHECKING([if have kthread_use_mm])
+ LB2_LINUX_TEST_RESULT([kthread_use_mm], [
+ AC_DEFINE(HAVE_KTHREAD_USE_MM, 1, ['kthread_use_mm' exists])
+ ])
+]) # LC_HAVE_KTHREAD_USE_MM
+
+#
# LC_FSCRYPT_FNAME_ALLOC_BUFFER
#
# Kernel 5.9-rc4 8b10fe68985278de4926daa56ad6af701839e40a
# 5.7
LC_SRC_FSCRYPT_DUMMY_CONTEXT_ENABLED
+ # 5.8
+ LC_SRC_HAVE_KTHREAD_USE_MM
+
# 5.9
LC_SRC_FSCRYPT_FNAME_ALLOC_BUFFER
LC_SRC_FSCRYPT_SET_CONTEXT
# 5.7
LC_FSCRYPT_DUMMY_CONTEXT_ENABLED
+ # 5.8
+ LC_HAVE_KTHREAD_USE_MM
+
# 5.9
LC_HAVE_ITER_FILE_SPLICE_WRITE
struct cl_object *cda_obj;
struct kiocb *cda_iocb;
ssize_t cda_bytes;
+ struct mm_struct *cda_mm;
unsigned cda_no_aio_complete:1,
cda_creator_free:1;
};
void ll_release_user_pages(struct page **pages, int npages);
+#ifndef HAVE_KTHREAD_USE_MM
+#define kthread_use_mm(mm) use_mm(mm)
+#define kthread_unuse_mm(mm) unuse_mm(mm)
+#endif
+
/** @} cl_sync_io */
/** \defgroup cl_env cl_env
cl_object_get(obj);
aio->cda_obj = obj;
+ aio->cda_mm = get_task_mm(current);
}
return aio;
}
void cl_dio_aio_free(const struct lu_env *env, struct cl_dio_aio *aio)
{
if (aio) {
+ if (aio->cda_mm)
+ mmput(aio->cda_mm);
cl_object_put(env, aio->cda_obj);
OBD_SLAB_FREE_PTR(aio, cl_dio_aio_kmem);
}