Whamcloud - gitweb
LU-2658 llite: too many arguments in generic_file_llseek_size
authorMinh Diep <minh.diep@intel.com>
Fri, 1 Feb 2013 16:30:32 +0000 (08:30 -0800)
committerOleg Drokin <oleg.drokin@intel.com>
Wed, 27 Feb 2013 04:28:53 +0000 (23:28 -0500)
A generic_file_llseek_size starting kernel 3.5 has 5 arguments.
We need to detect and use with the correct number of arguments.

Signed-off-by: Minh Diep <minh.diep@intel.com>
Change-Id: I966de37a880a94cde54be84062dec2b91e8334f5
Reviewed-on: http://review.whamcloud.com/5244
Tested-by: Hudson
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Yang Sheng <yang.sheng@intel.com>
Reviewed-by: Peng Tao <bergwolf@gmail.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/autoconf/lustre-core.m4
lustre/include/linux/lustre_compat25.h
lustre/llite/file.c

index c3ee6c0..f290ea2 100644 (file)
@@ -2126,6 +2126,22 @@ LB_LINUX_TRY_COMPILE([
 EXTRA_KCFLAGS="$tmp_flags"
 ])
 
+# 3.5 has generic_file_llseek_size with 5 args
+AC_DEFUN([LC_FILE_LLSEEK_SIZE_5ARG],
+[AC_MSG_CHECKING([if kernel has generic_file_llseek_size with 5 args])
+LB_LINUX_TRY_COMPILE([
+       #include <linux/fs.h>
+],[
+       generic_file_llseek_size(NULL, 0, 0, 0, 0);
+], [
+       AC_MSG_RESULT([yes])
+       AC_DEFINE(HAVE_FILE_LLSEEK_SIZE_5ARGS, 1,
+               [kernel has generic_file_llseek_size with 5 args])
+],[
+       AC_MSG_RESULT([no])
+])
+])
+
 #
 # 3.6 switch i_dentry/d_alias from list to hlist
 #
index b37e3cd..e300597 100644 (file)
@@ -168,6 +168,14 @@ static inline struct file *ll_dentry_open(struct dentry *dentry,
 
 #endif
 
+#if !defined(HAVE_FILE_LLSEEK_SIZE) || defined(HAVE_FILE_LLSEEK_5ARGS)
+#define ll_generic_file_llseek_size(file, offset, origin, maxbytes, eof) \
+               generic_file_llseek_size(file, offset, origin, maxbytes, eof);
+#else
+#define ll_generic_file_llseek_size(file, offset, origin, maxbytes, eof) \
+               generic_file_llseek_size(file, offset, origin, maxbytes);
+#endif
+
 #ifdef HAVE_INODE_DIO_WAIT
 /* inode_dio_wait(i) use as-is for write lock */
 # define inode_dio_write_done(i)       do {} while (0) /* for write unlock */
index f79ef9d..81b36ce 100644 (file)
@@ -2231,7 +2231,7 @@ loff_t ll_file_seek(struct file *file, loff_t offset, int origin)
                eof = i_size_read(inode);
        }
 
-       retval = generic_file_llseek_size(file, offset, origin,
+       retval = ll_generic_file_llseek_size(file, offset, origin,
                                          ll_file_maxbytes(inode), eof);
        RETURN(retval);
 }