From 9d3a33b176a1b353603f3a204ae1e818c05226c5 Mon Sep 17 00:00:00 2001 From: James Simmons Date: Fri, 5 Jun 2015 10:32:07 -0400 Subject: [PATCH] LU-6215 llite: handle removal of ki_nbytes in struct kiocb Starting in kernel version 3.19 the ki_nbytes field was removed from struct kiocb since now that data can be extracted from the struct bio_iter data. Signed-off-by: James Simmons Change-Id: Iaaf0c6dac19cffb4f4b6fc7a55cbc98cd09678a5 Reviewed-on: http://review.whamcloud.com/14683 Tested-by: Jenkins Tested-by: Maloo Reviewed-by: Dmitry Eremin Reviewed-by: Bob Glossman Reviewed-by: frank zago Reviewed-by: Oleg Drokin --- lustre/autoconf/lustre-core.m4 | 21 +++++++++++++++++++++ lustre/llite/file.c | 12 ++++++------ 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4 index 1b425c0..79a01c8 100644 --- a/lustre/autoconf/lustre-core.m4 +++ b/lustre/autoconf/lustre-core.m4 @@ -1629,6 +1629,24 @@ direct_io_iter, [ ]) # LC_DIRECTIO_USE_ITER # +# LC_KIOCB_HAS_NBYTES +# +# 3.19 kernel removed ki_nbytes from struct kiocb +# +AC_DEFUN([LC_KIOCB_HAS_NBYTES], [ +LB_CHECK_COMPILE([if struct kiocb has ki_nbytes field], +ki_nbytes, [ + #include +],[ + struct kiocb iocb; + + iocb.ki_nbytes = 0; +],[ + AC_DEFINE(HAVE_KI_NBYTES, 1, [ki_nbytes field exist]) +]) +]) # LC_KIOCB_HAS_NBYTES + +# # LC_CANCEL_DIRTY_PAGE # # 4.0.0 kernel removed cancle_dirty_page @@ -1797,6 +1815,9 @@ AC_DEFUN([LC_PROG_LINUX], [ # 3.16 LC_DIRECTIO_USE_ITER + # 3.19 + LC_KIOCB_HAS_NBYTES + # 4.0.0 LC_CANCEL_DIRTY_PAGE diff --git a/lustre/llite/file.c b/lustre/llite/file.c index 715e4ea..8b54068 100644 --- a/lustre/llite/file.c +++ b/lustre/llite/file.c @@ -1282,9 +1282,9 @@ static ssize_t ll_file_read(struct file *file, char __user *buf, size_t count, init_sync_kiocb(kiocb, file); kiocb->ki_pos = *ppos; #ifdef HAVE_KIOCB_KI_LEFT - kiocb->ki_left = count; -#else - kiocb->ki_nbytes = count; + kiocb->ki_left = count; +#elif defined(HAVE_KI_NBYTES) + kiocb->ki_nbytes = count; #endif result = ll_file_aio_read(kiocb, &iov, 1, kiocb->ki_pos); @@ -1364,9 +1364,9 @@ static ssize_t ll_file_write(struct file *file, const char __user *buf, init_sync_kiocb(kiocb, file); kiocb->ki_pos = *ppos; #ifdef HAVE_KIOCB_KI_LEFT - kiocb->ki_left = count; -#else - kiocb->ki_nbytes = count; + kiocb->ki_left = count; +#elif defined(HAVE_KI_NBYTES) + kiocb->ki_nbytes = count; #endif result = ll_file_aio_write(kiocb, &iov, 1, kiocb->ki_pos); -- 1.8.3.1