Whamcloud - gitweb
LU-6215 llite: handle removal of ki_nbytes in struct kiocb 83/14683/5
authorJames Simmons <uja.ornl@yahoo.com>
Fri, 5 Jun 2015 14:32:07 +0000 (10:32 -0400)
committerOleg Drokin <oleg.drokin@intel.com>
Fri, 19 Jun 2015 07:06:03 +0000 (07:06 +0000)
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 <uja.ornl@yahoo.com>
Change-Id: Iaaf0c6dac19cffb4f4b6fc7a55cbc98cd09678a5
Reviewed-on: http://review.whamcloud.com/14683
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Dmitry Eremin <dmitry.eremin@intel.com>
Reviewed-by: Bob Glossman <bob.glossman@intel.com>
Reviewed-by: frank zago <fzago@cray.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/autoconf/lustre-core.m4
lustre/llite/file.c

index 1b425c0..79a01c8 100644 (file)
@@ -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 <linux/fs.h>
+],[
+       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
 
index 715e4ea..8b54068 100644 (file)
@@ -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);