EXTRA_KCFLAGS="$tmp_flags"
]) # LC_HAVE_GET_ACL_RCU_ARG
+#
+# LC_HAVE_KIOCB_COMPLETE_2ARGS
+#
+# kernel v5.15-rc6-145-g6b19b766e8f0
+# fs: get rid of the res2 iocb->ki_complete argument
+#
+AC_DEFUN([LC_HAVE_KIOCB_COMPLETE_2ARGS], [
+tmp_flags="$EXTRA_KCFLAGS"
+EXTRA_KCFLAGS="-Werror"
+LB_CHECK_COMPILE([if kiocb->ki_complete() has 2 arguments],
+kiocb_ki_complete_2args, [
+ #include <linux/fs.h>
+
+ static void complete_fn(struct kiocb *iocb, long ret)
+ {
+ (void)iocb;
+ (void)ret;
+ }
+],[
+ struct kiocb *kio = NULL;
+
+ kio->ki_complete = complete_fn;
+],[
+ AC_DEFINE(HAVE_KIOCB_COMPLETE_2ARGS, 1,
+ [kiocb->ki_complete() has 2 arguments])
+])
+EXTRA_KCFLAGS="$tmp_flags"
+]) # LC_HAVE_KIOCB_COMPLETE_2ARGS
+
AC_DEFUN([LC_PROG_LINUX_SRC], [])
AC_DEFUN([LC_PROG_LINUX_RESULTS], [])
# 5.15
LC_HAVE_GET_ACL_RCU_ARG
+ # 5.16
+ LC_HAVE_KIOCB_COMPLETE_2ARGS
+
# kernel patch to extend integrity interface
LC_BIO_INTEGRITY_PREP_FN
}
EXPORT_SYMBOL(cl_sync_io_wait);
-#ifndef HAVE_AIO_COMPLETE
-static inline void aio_complete(struct kiocb *iocb, ssize_t res, ssize_t res2)
+static inline void dio_aio_complete(struct kiocb *iocb, ssize_t res)
{
+#ifdef HAVE_AIO_COMPLETE
+ aio_complete(iocb, res, 0);
+#else
if (iocb->ki_complete)
- iocb->ki_complete(iocb, res, res2);
-}
+# ifdef HAVE_KIOCB_COMPLETE_2ARGS
+ iocb->ki_complete(iocb, res);
+# else
+ iocb->ki_complete(iocb, res, 0);
+# endif
#endif
+}
static void cl_dio_aio_end(const struct lu_env *env, struct cl_sync_io *anchor)
{
ENTRY;
if (!aio->cda_no_aio_complete)
- aio_complete(aio->cda_iocb, ret ?: aio->cda_bytes, 0);
+ dio_aio_complete(aio->cda_iocb, ret ?: aio->cda_bytes);
EXIT;
}