From ca3dc23ce4265292abcf41375f5c7827d5b38b43 Mon Sep 17 00:00:00 2001 From: yangsheng Date: Wed, 1 Jan 2014 23:53:38 +0800 Subject: [PATCH] LU-4416 llite: struct kiocb ki_left removed struct kiocb without ki_left memeber since 3.12. Signed-off-by: yang sheng Change-Id: Iea1fb67ebb03430b5dc8f71ed2652967ff60b84d Reviewed-on: http://review.whamcloud.com/8801 Tested-by: Jenkins Reviewed-by: James Simmons Reviewed-by: Bob Glossman Tested-by: Maloo Reviewed-by: Oleg Drokin --- lustre/autoconf/lustre-core.m4 | 18 ++++++++++++++++++ lustre/llite/file.c | 8 ++++++++ 2 files changed, 26 insertions(+) diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4 index db0f02a..1904bcd 100644 --- a/lustre/autoconf/lustre-core.m4 +++ b/lustre/autoconf/lustre-core.m4 @@ -1379,6 +1379,23 @@ LB_LINUX_TRY_COMPILE([ ]) # +# 3.12 ki_left removed from struct kiocb +# +AC_DEFUN([LC_KIOCB_KI_LEFT], +[AC_MSG_CHECKING([if struct kiocb with ki_left member]) +LB_LINUX_TRY_COMPILE([ + #include +],[ + ((struct kiocb*)0)->ki_left = 0; +],[ + AC_DEFINE(HAVE_KIOCB_KI_LEFT, 1, [ki_left exist]) + AC_MSG_RESULT([yes]) +],[ + AC_MSG_RESULT([no]) +]) +]) + +# # LC_PROG_LINUX # # Lustre linux kernel checks @@ -1485,6 +1502,7 @@ AC_DEFUN([LC_PROG_LINUX], # 3.12 LC_OLDSIZE_TRUNCATE_PAGECACHE + LC_KIOCB_KI_LEFT # if test x$enable_server != xno ; then diff --git a/lustre/llite/file.c b/lustre/llite/file.c index f726ff2..f57b204 100644 --- a/lustre/llite/file.c +++ b/lustre/llite/file.c @@ -1302,7 +1302,11 @@ static ssize_t ll_file_read(struct file *file, char *buf, size_t count, local_iov->iov_len = count; init_sync_kiocb(kiocb, file); kiocb->ki_pos = *ppos; +#ifdef HAVE_KIOCB_KI_LEFT kiocb->ki_left = count; +#else + kiocb->ki_nbytes = count; +#endif result = ll_file_aio_read(kiocb, local_iov, 1, kiocb->ki_pos); *ppos = kiocb->ki_pos; @@ -1364,7 +1368,11 @@ static ssize_t ll_file_write(struct file *file, const char *buf, size_t count, local_iov->iov_len = count; init_sync_kiocb(kiocb, file); kiocb->ki_pos = *ppos; +#ifdef HAVE_KIOCB_KI_LEFT kiocb->ki_left = count; +#else + kiocb->ki_nbytes = count; +#endif result = ll_file_aio_write(kiocb, local_iov, 1, kiocb->ki_pos); *ppos = kiocb->ki_pos; -- 1.8.3.1