]) # LC_DIRECTIO_2ARGS
#
+# LC_GENERIC_WRITE_SYNC_2ARGS
+#
+# Kernel version 4.7 commit c8b8e32d700fe943a935e435ae251364d016c497
+# direct-io: eliminate the offset argument to ->direct_IO
+#
+AC_DEFUN([LC_GENERIC_WRITE_SYNC_2ARGS], [
+LB_CHECK_COMPILE([if 'generic_write_sync()' taken 2 arguments],
+generic_write_sync_2args, [
+ #include <linux/fs.h>
+],[
+ struct kiocb *iocb = NULL;
+ ssize_t rc;
+ rc = generic_write_sync(iocb, 0);
+],[
+ AC_DEFINE(HAVE_GENERIC_WRITE_SYNC_2ARGS, 1,
+ [generic_write_sync need 2 arguments])
+])
+]) # LC_GENERIC_WRITE_SYNC_2ARGS
+
+#
# LC_HAVE_POSIX_ACL_VALID_USER_NS
#
# 4.8 posix_acl_valid takes struct user_namespace
# 4.7
LC_DIRECTIO_2ARGS
+ LC_GENERIC_WRITE_SYNC_2ARGS
# 4.8
LC_HAVE_POSIX_ACL_VALID_USER_NS
if (lock_node)
inode_unlock(inode);
- if (result > 0 || result == -EIOCBQUEUED) {
+ if (result > 0 || result == -EIOCBQUEUED)
+#ifdef HAVE_GENERIC_WRITE_SYNC_2ARGS
+ result = generic_write_sync(vio->vui_iocb, result);
+#else
+ {
ssize_t err;
- err = generic_write_sync(vio->vui_iocb->ki_filp,
- pos, result);
+ err = generic_write_sync(vio->vui_iocb->ki_filp, pos,
+ result);
if (err < 0 && result > 0)
result = err;
}
+#endif
}
if (result > 0) {