Meta: 1
Name: spl
Branch: 1.0
-Version: 0.7.6
+Version: 0.7.8
Release: 1
Release-Tags: relext
License: GPL
$(top_srcdir)/module/Makefile.in \
$(top_srcdir)/module/spl/Makefile.in \
$(top_srcdir)/module/splat/Makefile.in AUTHORS COPYING \
- config/config.guess config/config.sub config/depcomp \
- config/install-sh config/ltmain.sh config/missing
+ config/compile config/config.guess config/config.sub \
+ config/depcomp config/install-sh config/ltmain.sh \
+ config/missing
@CONFIG_USER_TRUE@am__append_1 = lib cmd man scripts
@CONFIG_KERNEL_TRUE@am__append_2 = module
subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/kernel-ctl-table-name.m4 \
+ $(top_srcdir)/config/kernel-fallocate.m4 \
+ $(top_srcdir)/config/kernel-group-info.m4 \
+ $(top_srcdir)/config/kernel-inode-lock.m4 \
+ $(top_srcdir)/config/kernel-kmem-cache.m4 \
+ $(top_srcdir)/config/kernel-kuidgid.m4 \
+ $(top_srcdir)/config/kernel-pde-data.m4 \
+ $(top_srcdir)/config/kernel-rw.m4 \
+ $(top_srcdir)/config/kernel-rwsem.m4 \
+ $(top_srcdir)/config/kernel-sched.m4 \
+ $(top_srcdir)/config/kernel-set-fs-pwd.m4 \
+ $(top_srcdir)/config/kernel-shrinker.m4 \
+ $(top_srcdir)/config/kernel-spinlock.m4 \
+ $(top_srcdir)/config/kernel-timer.m4 \
+ $(top_srcdir)/config/kernel-trim-unused-symbols.m4 \
+ $(top_srcdir)/config/kernel-truncate-range.m4 \
+ $(top_srcdir)/config/kernel-urange-sleep.m4 \
+ $(top_srcdir)/config/kernel-vfs-fsync.m4 \
+ $(top_srcdir)/config/kernel-vfs-getattr.m4 \
+ $(top_srcdir)/config/kernel-wait.m4 \
+ $(top_srcdir)/config/kernel-zlib.m4 \
+ $(top_srcdir)/config/libtool.m4 \
$(top_srcdir)/config/ltoptions.m4 \
$(top_srcdir)/config/ltsugar.m4 \
$(top_srcdir)/config/ltversion.m4 \
AC_SUBST([am__untar])
]) # _AM_PROG_TAR
+m4_include([config/kernel-ctl-table-name.m4])
+m4_include([config/kernel-fallocate.m4])
+m4_include([config/kernel-group-info.m4])
+m4_include([config/kernel-inode-lock.m4])
+m4_include([config/kernel-kmem-cache.m4])
+m4_include([config/kernel-kuidgid.m4])
+m4_include([config/kernel-pde-data.m4])
+m4_include([config/kernel-rw.m4])
+m4_include([config/kernel-rwsem.m4])
+m4_include([config/kernel-sched.m4])
+m4_include([config/kernel-set-fs-pwd.m4])
+m4_include([config/kernel-shrinker.m4])
+m4_include([config/kernel-spinlock.m4])
+m4_include([config/kernel-timer.m4])
+m4_include([config/kernel-trim-unused-symbols.m4])
+m4_include([config/kernel-truncate-range.m4])
+m4_include([config/kernel-urange-sleep.m4])
+m4_include([config/kernel-vfs-fsync.m4])
+m4_include([config/kernel-vfs-getattr.m4])
+m4_include([config/kernel-wait.m4])
+m4_include([config/kernel-zlib.m4])
m4_include([config/libtool.m4])
m4_include([config/ltoptions.m4])
m4_include([config/ltsugar.m4])
subdir = cmd
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/kernel-ctl-table-name.m4 \
+ $(top_srcdir)/config/kernel-fallocate.m4 \
+ $(top_srcdir)/config/kernel-group-info.m4 \
+ $(top_srcdir)/config/kernel-inode-lock.m4 \
+ $(top_srcdir)/config/kernel-kmem-cache.m4 \
+ $(top_srcdir)/config/kernel-kuidgid.m4 \
+ $(top_srcdir)/config/kernel-pde-data.m4 \
+ $(top_srcdir)/config/kernel-rw.m4 \
+ $(top_srcdir)/config/kernel-rwsem.m4 \
+ $(top_srcdir)/config/kernel-sched.m4 \
+ $(top_srcdir)/config/kernel-set-fs-pwd.m4 \
+ $(top_srcdir)/config/kernel-shrinker.m4 \
+ $(top_srcdir)/config/kernel-spinlock.m4 \
+ $(top_srcdir)/config/kernel-timer.m4 \
+ $(top_srcdir)/config/kernel-trim-unused-symbols.m4 \
+ $(top_srcdir)/config/kernel-truncate-range.m4 \
+ $(top_srcdir)/config/kernel-urange-sleep.m4 \
+ $(top_srcdir)/config/kernel-vfs-fsync.m4 \
+ $(top_srcdir)/config/kernel-vfs-getattr.m4 \
+ $(top_srcdir)/config/kernel-wait.m4 \
+ $(top_srcdir)/config/kernel-zlib.m4 \
+ $(top_srcdir)/config/libtool.m4 \
$(top_srcdir)/config/ltoptions.m4 \
$(top_srcdir)/config/ltsugar.m4 \
$(top_srcdir)/config/ltversion.m4 \
sbin_PROGRAMS = splat$(EXEEXT)
subdir = cmd/splat
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/kernel-ctl-table-name.m4 \
+ $(top_srcdir)/config/kernel-fallocate.m4 \
+ $(top_srcdir)/config/kernel-group-info.m4 \
+ $(top_srcdir)/config/kernel-inode-lock.m4 \
+ $(top_srcdir)/config/kernel-kmem-cache.m4 \
+ $(top_srcdir)/config/kernel-kuidgid.m4 \
+ $(top_srcdir)/config/kernel-pde-data.m4 \
+ $(top_srcdir)/config/kernel-rw.m4 \
+ $(top_srcdir)/config/kernel-rwsem.m4 \
+ $(top_srcdir)/config/kernel-sched.m4 \
+ $(top_srcdir)/config/kernel-set-fs-pwd.m4 \
+ $(top_srcdir)/config/kernel-shrinker.m4 \
+ $(top_srcdir)/config/kernel-spinlock.m4 \
+ $(top_srcdir)/config/kernel-timer.m4 \
+ $(top_srcdir)/config/kernel-trim-unused-symbols.m4 \
+ $(top_srcdir)/config/kernel-truncate-range.m4 \
+ $(top_srcdir)/config/kernel-urange-sleep.m4 \
+ $(top_srcdir)/config/kernel-vfs-fsync.m4 \
+ $(top_srcdir)/config/kernel-vfs-getattr.m4 \
+ $(top_srcdir)/config/kernel-wait.m4 \
+ $(top_srcdir)/config/kernel-zlib.m4 \
+ $(top_srcdir)/config/libtool.m4 \
$(top_srcdir)/config/ltoptions.m4 \
$(top_srcdir)/config/ltsugar.m4 \
$(top_srcdir)/config/ltversion.m4 \
subdir = cmd/splslab
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/kernel-ctl-table-name.m4 \
+ $(top_srcdir)/config/kernel-fallocate.m4 \
+ $(top_srcdir)/config/kernel-group-info.m4 \
+ $(top_srcdir)/config/kernel-inode-lock.m4 \
+ $(top_srcdir)/config/kernel-kmem-cache.m4 \
+ $(top_srcdir)/config/kernel-kuidgid.m4 \
+ $(top_srcdir)/config/kernel-pde-data.m4 \
+ $(top_srcdir)/config/kernel-rw.m4 \
+ $(top_srcdir)/config/kernel-rwsem.m4 \
+ $(top_srcdir)/config/kernel-sched.m4 \
+ $(top_srcdir)/config/kernel-set-fs-pwd.m4 \
+ $(top_srcdir)/config/kernel-shrinker.m4 \
+ $(top_srcdir)/config/kernel-spinlock.m4 \
+ $(top_srcdir)/config/kernel-timer.m4 \
+ $(top_srcdir)/config/kernel-trim-unused-symbols.m4 \
+ $(top_srcdir)/config/kernel-truncate-range.m4 \
+ $(top_srcdir)/config/kernel-urange-sleep.m4 \
+ $(top_srcdir)/config/kernel-vfs-fsync.m4 \
+ $(top_srcdir)/config/kernel-vfs-getattr.m4 \
+ $(top_srcdir)/config/kernel-wait.m4 \
+ $(top_srcdir)/config/kernel-zlib.m4 \
+ $(top_srcdir)/config/libtool.m4 \
$(top_srcdir)/config/ltoptions.m4 \
$(top_srcdir)/config/ltsugar.m4 \
$(top_srcdir)/config/ltversion.m4 \
--- /dev/null
+#! /bin/sh
+# Wrapper for compilers which do not understand '-c -o'.
+
+scriptversion=2016-01-11.22; # UTC
+
+# Copyright (C) 1999-2017 Free Software Foundation, Inc.
+# Written by Tom Tromey <tromey@cygnus.com>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+nl='
+'
+
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent tools from complaining about whitespace usage.
+IFS=" "" $nl"
+
+file_conv=
+
+# func_file_conv build_file lazy
+# Convert a $build file to $host form and store it in $file
+# Currently only supports Windows hosts. If the determined conversion
+# type is listed in (the comma separated) LAZY, no conversion will
+# take place.
+func_file_conv ()
+{
+ file=$1
+ case $file in
+ / | /[!/]*) # absolute file, and not a UNC file
+ if test -z "$file_conv"; then
+ # lazily determine how to convert abs files
+ case `uname -s` in
+ MINGW*)
+ file_conv=mingw
+ ;;
+ CYGWIN*)
+ file_conv=cygwin
+ ;;
+ *)
+ file_conv=wine
+ ;;
+ esac
+ fi
+ case $file_conv/,$2, in
+ *,$file_conv,*)
+ ;;
+ mingw/*)
+ file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
+ ;;
+ cygwin/*)
+ file=`cygpath -m "$file" || echo "$file"`
+ ;;
+ wine/*)
+ file=`winepath -w "$file" || echo "$file"`
+ ;;
+ esac
+ ;;
+ esac
+}
+
+# func_cl_dashL linkdir
+# Make cl look for libraries in LINKDIR
+func_cl_dashL ()
+{
+ func_file_conv "$1"
+ if test -z "$lib_path"; then
+ lib_path=$file
+ else
+ lib_path="$lib_path;$file"
+ fi
+ linker_opts="$linker_opts -LIBPATH:$file"
+}
+
+# func_cl_dashl library
+# Do a library search-path lookup for cl
+func_cl_dashl ()
+{
+ lib=$1
+ found=no
+ save_IFS=$IFS
+ IFS=';'
+ for dir in $lib_path $LIB
+ do
+ IFS=$save_IFS
+ if $shared && test -f "$dir/$lib.dll.lib"; then
+ found=yes
+ lib=$dir/$lib.dll.lib
+ break
+ fi
+ if test -f "$dir/$lib.lib"; then
+ found=yes
+ lib=$dir/$lib.lib
+ break
+ fi
+ if test -f "$dir/lib$lib.a"; then
+ found=yes
+ lib=$dir/lib$lib.a
+ break
+ fi
+ done
+ IFS=$save_IFS
+
+ if test "$found" != yes; then
+ lib=$lib.lib
+ fi
+}
+
+# func_cl_wrapper cl arg...
+# Adjust compile command to suit cl
+func_cl_wrapper ()
+{
+ # Assume a capable shell
+ lib_path=
+ shared=:
+ linker_opts=
+ for arg
+ do
+ if test -n "$eat"; then
+ eat=
+ else
+ case $1 in
+ -o)
+ # configure might choose to run compile as 'compile cc -o foo foo.c'.
+ eat=1
+ case $2 in
+ *.o | *.[oO][bB][jJ])
+ func_file_conv "$2"
+ set x "$@" -Fo"$file"
+ shift
+ ;;
+ *)
+ func_file_conv "$2"
+ set x "$@" -Fe"$file"
+ shift
+ ;;
+ esac
+ ;;
+ -I)
+ eat=1
+ func_file_conv "$2" mingw
+ set x "$@" -I"$file"
+ shift
+ ;;
+ -I*)
+ func_file_conv "${1#-I}" mingw
+ set x "$@" -I"$file"
+ shift
+ ;;
+ -l)
+ eat=1
+ func_cl_dashl "$2"
+ set x "$@" "$lib"
+ shift
+ ;;
+ -l*)
+ func_cl_dashl "${1#-l}"
+ set x "$@" "$lib"
+ shift
+ ;;
+ -L)
+ eat=1
+ func_cl_dashL "$2"
+ ;;
+ -L*)
+ func_cl_dashL "${1#-L}"
+ ;;
+ -static)
+ shared=false
+ ;;
+ -Wl,*)
+ arg=${1#-Wl,}
+ save_ifs="$IFS"; IFS=','
+ for flag in $arg; do
+ IFS="$save_ifs"
+ linker_opts="$linker_opts $flag"
+ done
+ IFS="$save_ifs"
+ ;;
+ -Xlinker)
+ eat=1
+ linker_opts="$linker_opts $2"
+ ;;
+ -*)
+ set x "$@" "$1"
+ shift
+ ;;
+ *.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
+ func_file_conv "$1"
+ set x "$@" -Tp"$file"
+ shift
+ ;;
+ *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
+ func_file_conv "$1" mingw
+ set x "$@" "$file"
+ shift
+ ;;
+ *)
+ set x "$@" "$1"
+ shift
+ ;;
+ esac
+ fi
+ shift
+ done
+ if test -n "$linker_opts"; then
+ linker_opts="-link$linker_opts"
+ fi
+ exec "$@" $linker_opts
+ exit 1
+}
+
+eat=
+
+case $1 in
+ '')
+ echo "$0: No command. Try '$0 --help' for more information." 1>&2
+ exit 1;
+ ;;
+ -h | --h*)
+ cat <<\EOF
+Usage: compile [--help] [--version] PROGRAM [ARGS]
+
+Wrapper for compilers which do not understand '-c -o'.
+Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
+arguments, and rename the output as expected.
+
+If you are trying to build a whole package this is not the
+right script to run: please start by reading the file 'INSTALL'.
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "compile $scriptversion"
+ exit $?
+ ;;
+ cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \
+ icl | *[/\\]icl | icl.exe | *[/\\]icl.exe )
+ func_cl_wrapper "$@" # Doesn't return...
+ ;;
+esac
+
+ofile=
+cfile=
+
+for arg
+do
+ if test -n "$eat"; then
+ eat=
+ else
+ case $1 in
+ -o)
+ # configure might choose to run compile as 'compile cc -o foo foo.c'.
+ # So we strip '-o arg' only if arg is an object.
+ eat=1
+ case $2 in
+ *.o | *.obj)
+ ofile=$2
+ ;;
+ *)
+ set x "$@" -o "$2"
+ shift
+ ;;
+ esac
+ ;;
+ *.c)
+ cfile=$1
+ set x "$@" "$1"
+ shift
+ ;;
+ *)
+ set x "$@" "$1"
+ shift
+ ;;
+ esac
+ fi
+ shift
+done
+
+if test -z "$ofile" || test -z "$cfile"; then
+ # If no '-o' option was seen then we might have been invoked from a
+ # pattern rule where we don't need one. That is ok -- this is a
+ # normal compilation that the losing compiler can handle. If no
+ # '.c' file was seen then we are probably linking. That is also
+ # ok.
+ exec "$@"
+fi
+
+# Name of file we expect compiler to create.
+cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
+
+# Create the lock directory.
+# Note: use '[/\\:.-]' here to ensure that we don't use the same name
+# that we are using for the .o file. Also, base the name on the expected
+# object file name, since that is what matters with a parallel build.
+lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
+while true; do
+ if mkdir "$lockdir" >/dev/null 2>&1; then
+ break
+ fi
+ sleep 1
+done
+# FIXME: race condition here if user kills between mkdir and trap.
+trap "rmdir '$lockdir'; exit 1" 1 2 15
+
+# Run the compile.
+"$@"
+ret=$?
+
+if test -f "$cofile"; then
+ test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
+elif test -f "${cofile}bj"; then
+ test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
+fi
+
+rmdir "$lockdir"
+exit $ret
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
--- /dev/null
+dnl #
+dnl # 2.6.33 API change,
+dnl # Removed .ctl_name from struct ctl_table.
+dnl #
+AC_DEFUN([SPL_AC_CTL_NAME], [
+ AC_MSG_CHECKING([whether struct ctl_table has ctl_name])
+ SPL_LINUX_TRY_COMPILE([
+ #include <linux/sysctl.h>
+ ],[
+ struct ctl_table ctl __attribute__ ((unused));
+ ctl.ctl_name = 0;
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_CTL_NAME, 1, [struct ctl_table has ctl_name])
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+])
--- /dev/null
+dnl #
+dnl # Linux 2.6.38 - 3.x API
+dnl #
+AC_DEFUN([SPL_AC_KERNEL_FILE_FALLOCATE], [
+ AC_MSG_CHECKING([whether fops->fallocate() exists])
+ SPL_LINUX_TRY_COMPILE([
+ #include <linux/fs.h>
+ ],[
+ long (*fallocate) (struct file *, int, loff_t, loff_t) = NULL;
+ struct file_operations fops __attribute__ ((unused)) = {
+ .fallocate = fallocate,
+ };
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_FILE_FALLOCATE, 1, [fops->fallocate() exists])
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+])
+dnl #
+dnl # Linux 2.6.x - 2.6.37 API
+dnl #
+AC_DEFUN([SPL_AC_KERNEL_INODE_FALLOCATE], [
+ AC_MSG_CHECKING([whether iops->fallocate() exists])
+ SPL_LINUX_TRY_COMPILE([
+ #include <linux/fs.h>
+ ],[
+ long (*fallocate) (struct inode *, int, loff_t, loff_t) = NULL;
+ struct inode_operations fops __attribute__ ((unused)) = {
+ .fallocate = fallocate,
+ };
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_INODE_FALLOCATE, 1, [fops->fallocate() exists])
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+])
+
+dnl #
+dnl # PaX Linux 2.6.38 - 3.x API
+dnl #
+AC_DEFUN([SPL_AC_PAX_KERNEL_FILE_FALLOCATE], [
+ AC_MSG_CHECKING([whether fops->fallocate() exists])
+ SPL_LINUX_TRY_COMPILE([
+ #include <linux/fs.h>
+ ],[
+ long (*fallocate) (struct file *, int, loff_t, loff_t) = NULL;
+ struct file_operations_no_const fops __attribute__ ((unused)) = {
+ .fallocate = fallocate,
+ };
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_FILE_FALLOCATE, 1, [fops->fallocate() exists])
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+])
+
+dnl #
+dnl # The fallocate callback was moved from the inode_operations
+dnl # structure to the file_operations structure.
+dnl #
+AC_DEFUN([SPL_AC_KERNEL_FALLOCATE], [
+ SPL_AC_KERNEL_FILE_FALLOCATE
+ SPL_AC_KERNEL_INODE_FALLOCATE
+ SPL_AC_PAX_KERNEL_FILE_FALLOCATE
+])
--- /dev/null
+dnl #
+dnl # 4.9 API change
+dnl # group_info changed from 2d array via >blocks to 1d array via ->gid
+dnl #
+AC_DEFUN([SPL_AC_GROUP_INFO_GID], [
+ AC_MSG_CHECKING([whether group_info->gid exists])
+ tmp_flags="$EXTRA_KCFLAGS"
+ EXTRA_KCFLAGS="-Werror"
+ SPL_LINUX_TRY_COMPILE([
+ #include <linux/cred.h>
+ ],[
+ struct group_info *gi = groups_alloc(1);
+ gi->gid[0] = KGIDT_INIT(0);
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_GROUP_INFO_GID, 1, [group_info->gid exists])
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+ EXTRA_KCFLAGS="$tmp_flags"
+])
--- /dev/null
+dnl #
+dnl # 4.7 API change
+dnl # i_mutex is changed to i_rwsem. Instead of directly using
+dnl # i_mutex/i_rwsem, we should use inode_lock() and inode_lock_shared()
+dnl # We test inode_lock_shared because inode_lock is introduced earlier.
+dnl #
+AC_DEFUN([SPL_AC_INODE_LOCK], [
+ AC_MSG_CHECKING([whether inode_lock_shared() exists])
+ tmp_flags="$EXTRA_KCFLAGS"
+ EXTRA_KCFLAGS="-Werror"
+ SPL_LINUX_TRY_COMPILE([
+ #include <linux/fs.h>
+ ],[
+ struct inode *inode = NULL;
+ inode_lock_shared(inode);
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_INODE_LOCK_SHARED, 1, [yes])
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+ EXTRA_KCFLAGS="$tmp_flags"
+])
--- /dev/null
+dnl #
+dnl # 2.6.35 API change,
+dnl # The cachep->gfpflags member was renamed cachep->allocflags. These are
+dnl # private allocation flags which are applied when allocating a new slab
+dnl # in kmem_getpages(). Unfortunately there is no public API for setting
+dnl # non-default flags.
+dnl #
+AC_DEFUN([SPL_AC_KMEM_CACHE_ALLOCFLAGS], [
+ AC_MSG_CHECKING([whether struct kmem_cache has allocflags])
+ SPL_LINUX_TRY_COMPILE([
+ #include <linux/slab.h>
+ ],[
+ struct kmem_cache cachep __attribute__ ((unused));
+ cachep.allocflags = GFP_KERNEL;
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_KMEM_CACHE_ALLOCFLAGS, 1,
+ [struct kmem_cache has allocflags])
+ ],[
+ AC_MSG_RESULT(no)
+
+ AC_MSG_CHECKING([whether struct kmem_cache has gfpflags])
+ SPL_LINUX_TRY_COMPILE([
+ #include <linux/slab.h>
+ ],[
+ struct kmem_cache cachep __attribute__ ((unused));
+ cachep.gfpflags = GFP_KERNEL;
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_KMEM_CACHE_GFPFLAGS, 1,
+ [struct kmem_cache has gfpflags])
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+ ])
+])
+
+dnl #
+dnl # grsecurity API change,
+dnl # kmem_cache_create() with SLAB_USERCOPY flag replaced by
+dnl # kmem_cache_create_usercopy().
+dnl #
+AC_DEFUN([SPL_AC_KMEM_CACHE_CREATE_USERCOPY], [
+ AC_MSG_CHECKING([whether kmem_cache_create_usercopy() exists])
+ tmp_flags="$EXTRA_KCFLAGS"
+ EXTRA_KCFLAGS="-Werror"
+ SPL_LINUX_TRY_COMPILE([
+ #include <linux/slab.h>
+ static void ctor(void *foo)
+ {
+ // fake ctor
+ }
+ ],[
+ struct kmem_cache *skc_linux_cache;
+ const char *name = "test";
+ size_t size = 4096;
+ size_t align = 8;
+ unsigned long flags = 0;
+ size_t useroffset = 0;
+ size_t usersize = size - useroffset;
+
+ skc_linux_cache = kmem_cache_create_usercopy(
+ name, size, align, flags, useroffset, usersize, ctor);
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_KMEM_CACHE_CREATE_USERCOPY, 1,
+ [kmem_cache_create_usercopy() exists])
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+ EXTRA_KCFLAGS="$tmp_flags"
+])
--- /dev/null
+dnl #
+dnl # User namespaces, use kuid_t in place of uid_t
+dnl # where available. Not strictly a user namespaces thing
+dnl # but it should prevent surprises
+dnl #
+AC_DEFUN([SPL_AC_KUIDGID_T], [
+ AC_MSG_CHECKING([whether kuid_t/kgid_t is available])
+ SPL_LINUX_TRY_COMPILE([
+ #include <linux/uidgid.h>
+ ], [
+ kuid_t userid = KUIDT_INIT(0);
+ kgid_t groupid = KGIDT_INIT(0);
+ ],[
+ SPL_LINUX_TRY_COMPILE([
+ #include <linux/uidgid.h>
+ ], [
+ kuid_t userid = 0;
+ kgid_t groupid = 0;
+ ],[
+ AC_MSG_RESULT(yes; optional)
+ ],[
+ AC_MSG_RESULT(yes; mandatory)
+ AC_DEFINE(HAVE_KUIDGID_T, 1, [kuid_t/kgid_t in use])
+ ])
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+])
--- /dev/null
+dnl #
+dnl # 3.10 API change,
+dnl # PDE is replaced by PDE_DATA
+dnl #
+AC_DEFUN([SPL_AC_PDE_DATA], [
+ AC_MSG_CHECKING([whether PDE_DATA() is available])
+ SPL_LINUX_TRY_COMPILE_SYMBOL([
+ #include <linux/proc_fs.h>
+ ], [
+ PDE_DATA(NULL);
+ ], [PDE_DATA], [], [
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_PDE_DATA, 1, [yes])
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+])
--- /dev/null
+dnl #
+dnl # 4.14 API change
+dnl # kernel_write() which was introduced in 3.9 was updated to take
+dnl # the offset as a pointer which is needed by vn_rdwr().
+dnl #
+AC_DEFUN([SPL_AC_KERNEL_WRITE], [
+ AC_MSG_CHECKING([whether kernel_write() takes loff_t pointer])
+ tmp_flags="$EXTRA_KCFLAGS"
+ EXTRA_KCFLAGS="-Werror"
+ SPL_LINUX_TRY_COMPILE([
+ #include <linux/fs.h>
+ ],[
+ struct file *file = NULL;
+ const void *buf = NULL;
+ size_t count = 0;
+ loff_t *pos = NULL;
+ ssize_t ret;
+
+ ret = kernel_write(file, buf, count, pos);
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_KERNEL_WRITE_PPOS, 1,
+ [kernel_write() take loff_t pointer])
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+ EXTRA_KCFLAGS="$tmp_flags"
+])
+
+dnl #
+dnl # 4.14 API change
+dnl # kernel_read() which has existed for forever was updated to take
+dnl # the offset as a pointer which is needed by vn_rdwr().
+dnl #
+AC_DEFUN([SPL_AC_KERNEL_READ], [
+ AC_MSG_CHECKING([whether kernel_read() takes loff_t pointer])
+ tmp_flags="$EXTRA_KCFLAGS"
+ EXTRA_KCFLAGS="-Werror"
+ SPL_LINUX_TRY_COMPILE([
+ #include <linux/fs.h>
+ ],[
+ struct file *file = NULL;
+ void *buf = NULL;
+ size_t count = 0;
+ loff_t *pos = NULL;
+ ssize_t ret;
+
+ ret = kernel_read(file, buf, count, pos);
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_KERNEL_READ_PPOS, 1,
+ [kernel_read() take loff_t pointer])
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+ EXTRA_KCFLAGS="$tmp_flags"
+])
--- /dev/null
+dnl #
+dnl # 3.1 API Change
+dnl #
+dnl # The rw_semaphore.wait_lock member was changed from spinlock_t to
+dnl # raw_spinlock_t at commit ddb6c9b58a19edcfac93ac670b066c836ff729f1.
+dnl #
+AC_DEFUN([SPL_AC_RWSEM_SPINLOCK_IS_RAW], [
+ AC_MSG_CHECKING([whether struct rw_semaphore member wait_lock is raw])
+ tmp_flags="$EXTRA_KCFLAGS"
+ EXTRA_KCFLAGS="-Werror"
+ SPL_LINUX_TRY_COMPILE([
+ #include <linux/rwsem.h>
+ ],[
+ struct rw_semaphore dummy_semaphore __attribute__ ((unused));
+ raw_spinlock_t dummy_lock __attribute__ ((unused)) =
+ __RAW_SPIN_LOCK_INITIALIZER(dummy_lock);
+ dummy_semaphore.wait_lock = dummy_lock;
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(RWSEM_SPINLOCK_IS_RAW, 1,
+ [struct rw_semaphore member wait_lock is raw_spinlock_t])
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+ EXTRA_KCFLAGS="$tmp_flags"
+])
+
+dnl #
+dnl # 3.16 API Change
+dnl #
+dnl # rwsem-spinlock "->activity" changed to "->count"
+dnl #
+AC_DEFUN([SPL_AC_RWSEM_ACTIVITY], [
+ AC_MSG_CHECKING([whether struct rw_semaphore has member activity])
+ tmp_flags="$EXTRA_KCFLAGS"
+ EXTRA_KCFLAGS="-Werror"
+ SPL_LINUX_TRY_COMPILE([
+ #include <linux/rwsem.h>
+ ],[
+ struct rw_semaphore dummy_semaphore __attribute__ ((unused));
+ dummy_semaphore.activity = 0;
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_RWSEM_ACTIVITY, 1,
+ [struct rw_semaphore has member activity])
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+ EXTRA_KCFLAGS="$tmp_flags"
+])
+
+dnl #
+dnl # 4.8 API Change
+dnl #
+dnl # rwsem "->count" changed to atomic_long_t type
+dnl #
+AC_DEFUN([SPL_AC_RWSEM_ATOMIC_LONG_COUNT], [
+ AC_MSG_CHECKING(
+ [whether struct rw_semaphore has atomic_long_t member count])
+ tmp_flags="$EXTRA_KCFLAGS"
+ EXTRA_KCFLAGS="-Werror"
+ SPL_LINUX_TRY_COMPILE([
+ #include <linux/rwsem.h>
+ ],[
+ DECLARE_RWSEM(dummy_semaphore);
+ (void) atomic_long_read(&dummy_semaphore.count);
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_RWSEM_ATOMIC_LONG_COUNT, 1,
+ [struct rw_semaphore has atomic_long_t member count])
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+ EXTRA_KCFLAGS="$tmp_flags"
+])
--- /dev/null
+dnl #
+dnl # 3.9 API change,
+dnl # Moved things from linux/sched.h to linux/sched/rt.h
+dnl #
+AC_DEFUN([SPL_AC_SCHED_RT_HEADER],
+ [AC_MSG_CHECKING([whether header linux/sched/rt.h exists])
+ SPL_LINUX_TRY_COMPILE([
+ #include <linux/sched.h>
+ #include <linux/sched/rt.h>
+ ],[
+ return 0;
+ ],[
+ AC_DEFINE(HAVE_SCHED_RT_HEADER, 1, [linux/sched/rt.h exists])
+ AC_MSG_RESULT(yes)
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+])
+
+dnl #
+dnl # 4.11 API change,
+dnl # Moved things from linux/sched.h to linux/sched/signal.h
+dnl #
+AC_DEFUN([SPL_AC_SCHED_SIGNAL_HEADER],
+ [AC_MSG_CHECKING([whether header linux/sched/signal.h exists])
+ SPL_LINUX_TRY_COMPILE([
+ #include <linux/sched.h>
+ #include <linux/sched/signal.h>
+ ],[
+ return 0;
+ ],[
+ AC_DEFINE(HAVE_SCHED_SIGNAL_HEADER, 1, [linux/sched/signal.h exists])
+ AC_MSG_RESULT(yes)
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+])
+dnl #
+dnl # 3.19 API change
+dnl # The io_schedule_timeout() function is present in all 2.6.32 kernels
+dnl # but it was not exported until Linux 3.19. The RHEL 7.x kernels which
+dnl # are based on a 3.10 kernel do export this symbol.
+dnl #
+AC_DEFUN([SPL_AC_IO_SCHEDULE_TIMEOUT], [
+ AC_MSG_CHECKING([whether io_schedule_timeout() is available])
+ SPL_LINUX_TRY_COMPILE_SYMBOL([
+ #include <linux/sched.h>
+ ], [
+ (void) io_schedule_timeout(1);
+ ], [io_schedule_timeout], [], [
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_IO_SCHEDULE_TIMEOUT, 1, [yes])
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+])
--- /dev/null
+dnl #
+dnl # 3.9 API change
+dnl # set_fs_pwd takes const struct path *
+dnl #
+AC_DEFUN([SPL_AC_SET_FS_PWD_WITH_CONST],
+ tmp_flags="$EXTRA_KCFLAGS"
+ EXTRA_KCFLAGS="-Werror"
+ [AC_MSG_CHECKING([whether set_fs_pwd() requires const struct path *])
+ SPL_LINUX_TRY_COMPILE([
+ #include <linux/spinlock.h>
+ #include <linux/fs_struct.h>
+ #include <linux/path.h>
+ void (*const set_fs_pwd_func)
+ (struct fs_struct *, const struct path *)
+ = set_fs_pwd;
+ ],[
+ return 0;
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_SET_FS_PWD_WITH_CONST, 1,
+ [set_fs_pwd() needs const path *])
+ ],[
+ SPL_LINUX_TRY_COMPILE([
+ #include <linux/spinlock.h>
+ #include <linux/fs_struct.h>
+ #include <linux/path.h>
+ void (*const set_fs_pwd_func)
+ (struct fs_struct *, struct path *)
+ = set_fs_pwd;
+ ],[
+ return 0;
+ ],[
+ AC_MSG_RESULT(no)
+ ],[
+ AC_MSG_ERROR(unknown)
+ ])
+ ])
+ EXTRA_KCFLAGS="$tmp_flags"
+])
--- /dev/null
+AC_DEFUN([SPL_AC_SHRINKER_CALLBACK],[
+ tmp_flags="$EXTRA_KCFLAGS"
+ EXTRA_KCFLAGS="-Werror"
+ dnl #
+ dnl # 2.6.23 to 2.6.34 API change
+ dnl # ->shrink(int nr_to_scan, gfp_t gfp_mask)
+ dnl #
+ AC_MSG_CHECKING([whether old 2-argument shrinker exists])
+ SPL_LINUX_TRY_COMPILE([
+ #include <linux/mm.h>
+
+ int shrinker_cb(int nr_to_scan, gfp_t gfp_mask);
+ ],[
+ struct shrinker cache_shrinker = {
+ .shrink = shrinker_cb,
+ .seeks = DEFAULT_SEEKS,
+ };
+ register_shrinker(&cache_shrinker);
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_2ARGS_OLD_SHRINKER_CALLBACK, 1,
+ [old shrinker callback wants 2 args])
+ ],[
+ AC_MSG_RESULT(no)
+ dnl #
+ dnl # 2.6.35 - 2.6.39 API change
+ dnl # ->shrink(struct shrinker *,
+ dnl # int nr_to_scan, gfp_t gfp_mask)
+ dnl #
+ AC_MSG_CHECKING([whether old 3-argument shrinker exists])
+ SPL_LINUX_TRY_COMPILE([
+ #include <linux/mm.h>
+
+ int shrinker_cb(struct shrinker *, int nr_to_scan,
+ gfp_t gfp_mask);
+ ],[
+ struct shrinker cache_shrinker = {
+ .shrink = shrinker_cb,
+ .seeks = DEFAULT_SEEKS,
+ };
+ register_shrinker(&cache_shrinker);
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_3ARGS_SHRINKER_CALLBACK, 1,
+ [old shrinker callback wants 3 args])
+ ],[
+ AC_MSG_RESULT(no)
+ dnl #
+ dnl # 3.0 - 3.11 API change
+ dnl # ->shrink(struct shrinker *,
+ dnl # struct shrink_control *sc)
+ dnl #
+ AC_MSG_CHECKING(
+ [whether new 2-argument shrinker exists])
+ SPL_LINUX_TRY_COMPILE([
+ #include <linux/mm.h>
+
+ int shrinker_cb(struct shrinker *,
+ struct shrink_control *sc);
+ ],[
+ struct shrinker cache_shrinker = {
+ .shrink = shrinker_cb,
+ .seeks = DEFAULT_SEEKS,
+ };
+ register_shrinker(&cache_shrinker);
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_2ARGS_NEW_SHRINKER_CALLBACK, 1,
+ [new shrinker callback wants 2 args])
+ ],[
+ AC_MSG_RESULT(no)
+ dnl #
+ dnl # 3.12 API change,
+ dnl # ->shrink() is logically split in to
+ dnl # ->count_objects() and ->scan_objects()
+ dnl #
+ AC_MSG_CHECKING(
+ [whether ->count_objects callback exists])
+ SPL_LINUX_TRY_COMPILE([
+ #include <linux/mm.h>
+
+ unsigned long shrinker_cb(
+ struct shrinker *,
+ struct shrink_control *sc);
+ ],[
+ struct shrinker cache_shrinker = {
+ .count_objects = shrinker_cb,
+ .scan_objects = shrinker_cb,
+ .seeks = DEFAULT_SEEKS,
+ };
+ register_shrinker(&cache_shrinker);
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_SPLIT_SHRINKER_CALLBACK,
+ 1, [->count_objects exists])
+ ],[
+ AC_MSG_ERROR(error)
+ ])
+ ])
+ ])
+ ])
+ EXTRA_KCFLAGS="$tmp_flags"
+])
+
+dnl #
+dnl # 2.6.39 API change,
+dnl # Shrinker adjust to use common shrink_control structure.
+dnl #
+AC_DEFUN([SPL_AC_SHRINK_CONTROL_STRUCT], [
+ AC_MSG_CHECKING([whether struct shrink_control exists])
+ SPL_LINUX_TRY_COMPILE([
+ #include <linux/mm.h>
+ ],[
+ struct shrink_control sc __attribute__ ((unused));
+
+ sc.nr_to_scan = 0;
+ sc.gfp_mask = GFP_KERNEL;
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_SHRINK_CONTROL_STRUCT, 1,
+ [struct shrink_control exists])
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+])
--- /dev/null
+dnl #
+dnl # 2.6.36 API change,
+dnl # The 'struct fs_struct->lock' was changed from a rwlock_t to
+dnl # a spinlock_t to improve the fastpath performance.
+dnl #
+AC_DEFUN([SPL_AC_FS_STRUCT_SPINLOCK], [
+ AC_MSG_CHECKING([whether struct fs_struct uses spinlock_t])
+ tmp_flags="$EXTRA_KCFLAGS"
+ EXTRA_KCFLAGS="-Werror"
+ SPL_LINUX_TRY_COMPILE([
+ #include <linux/sched.h>
+ #include <linux/fs_struct.h>
+ ],[
+ static struct fs_struct fs;
+ spin_lock_init(&fs.lock);
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_FS_STRUCT_SPINLOCK, 1,
+ [struct fs_struct uses spinlock_t])
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+ EXTRA_KCFLAGS="$tmp_flags"
+])
--- /dev/null
+dnl #
+dnl # 4.15 API change
+dnl # https://lkml.org/lkml/2017/11/25/90
+dnl # Check if timer_list.func get passed a timer_list or an unsigned long
+dnl # (older kernels). Also sanity check the from_timer() and timer_setup()
+dnl # macros are available as well, since they will be used in the same newer
+dnl # kernels that support the new timer_list.func signature.
+dnl #
+AC_DEFUN([SPL_AC_KERNEL_TIMER_FUNCTION_TIMER_LIST], [
+ AC_MSG_CHECKING([whether timer_list.function gets a timer_list])
+ tmp_flags="$EXTRA_KCFLAGS"
+ EXTRA_KCFLAGS="-Werror"
+ SPL_LINUX_TRY_COMPILE([
+ #include <linux/timer.h>
+ void task_expire(struct timer_list *tl) {}
+ ],[
+ #ifndef from_timer
+ #error "No from_timer() macro"
+ #endif
+
+ struct timer_list timer;
+ timer.function = task_expire;
+ timer_setup(&timer, NULL, 0);
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_KERNEL_TIMER_FUNCTION_TIMER_LIST, 1,
+ [timer_list.function gets a timer_list])
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+ EXTRA_KCFLAGS="$tmp_flags"
+])
--- /dev/null
+dnl #
+dnl # config trim unused symbols,
+dnl # Verify the kernel has CONFIG_TRIM_UNUSED_KSYMS DISABLED.
+dnl #
+AC_DEFUN([SPL_AC_CONFIG_TRIM_UNUSED_KSYMS], [
+ AC_MSG_CHECKING([whether CONFIG_TRIM_UNUSED_KSYM is disabled])
+ SPL_LINUX_TRY_COMPILE([
+ #if defined(CONFIG_TRIM_UNUSED_KSYMS)
+ #error CONFIG_TRIM_UNUSED_KSYMS not defined
+ #endif
+ ],[ ],[
+ AC_MSG_RESULT([yes])
+ ],[
+ AC_MSG_RESULT([no])
+ AC_MSG_ERROR([
+ *** This kernel has unused symbols trimming enabled, please disable.
+ *** Rebuild the kernel with CONFIG_TRIM_UNUSED_KSYMS=n set.])
+ ])
+])
--- /dev/null
+dnl #
+dnl # 3.5 API change,
+dnl # inode_operations.truncate_range removed
+dnl #
+AC_DEFUN([SPL_AC_INODE_TRUNCATE_RANGE], [
+ AC_MSG_CHECKING([whether truncate_range() inode operation is available])
+ SPL_LINUX_TRY_COMPILE([
+ #include <linux/fs.h>
+ ],[
+ struct inode_operations ops;
+ ops.truncate_range = NULL;
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_INODE_TRUNCATE_RANGE, 1,
+ [truncate_range() inode operation is available])
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+])
--- /dev/null
+dnl #
+dnl # 2.6.36 API compatibility.
+dnl # Added usleep_range timer.
+dnl # usleep_range is a finer precision implementation of msleep
+dnl # designed to be a drop-in replacement for udelay where a precise
+dnl # sleep / busy-wait is unnecessary.
+dnl #
+AC_DEFUN([SPL_AC_USLEEP_RANGE], [
+ AC_MSG_CHECKING([whether usleep_range() is available])
+ SPL_LINUX_TRY_COMPILE([
+ #include <linux/delay.h>
+ ],[
+ usleep_range(0, 0);
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_USLEEP_RANGE, 1,
+ [usleep_range is available])
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+])
--- /dev/null
+dnl #
+dnl # 2.6.35 API change,
+dnl # Unused 'struct dentry *' removed from vfs_fsync() prototype.
+dnl #
+AC_DEFUN([SPL_AC_2ARGS_VFS_FSYNC], [
+ AC_MSG_CHECKING([whether vfs_fsync() wants 2 args])
+ SPL_LINUX_TRY_COMPILE([
+ #include <linux/fs.h>
+ ],[
+ vfs_fsync(NULL, 0);
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_2ARGS_VFS_FSYNC, 1, [vfs_fsync() wants 2 args])
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+])
--- /dev/null
+dnl #
+dnl # 4.11 API, a528d35e@torvalds/linux
+dnl # vfs_getattr(const struct path *p, struct kstat *s, u32 m, unsigned int f)
+dnl #
+AC_DEFUN([SPL_AC_4ARGS_VFS_GETATTR], [
+ AC_MSG_CHECKING([whether vfs_getattr() wants 4 args])
+ SPL_LINUX_TRY_COMPILE([
+ #include <linux/fs.h>
+ ],[
+ vfs_getattr((const struct path *)NULL,
+ (struct kstat *)NULL,
+ (u32)0,
+ (unsigned int)0);
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_4ARGS_VFS_GETATTR, 1,
+ [vfs_getattr wants 4 args])
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+])
+
+dnl #
+dnl # 3.9 API
+dnl # vfs_getattr(struct path *p, struct kstat *s)
+dnl #
+AC_DEFUN([SPL_AC_2ARGS_VFS_GETATTR], [
+ AC_MSG_CHECKING([whether vfs_getattr() wants 2 args])
+ SPL_LINUX_TRY_COMPILE([
+ #include <linux/fs.h>
+ ],[
+ vfs_getattr((struct path *) NULL,
+ (struct kstat *)NULL);
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_2ARGS_VFS_GETATTR, 1,
+ [vfs_getattr wants 2 args])
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+])
+
+dnl #
+dnl # <3.9 API
+dnl # vfs_getattr(struct vfsmount *v, struct dentry *d, struct kstat *k)
+dnl #
+AC_DEFUN([SPL_AC_3ARGS_VFS_GETATTR], [
+ AC_MSG_CHECKING([whether vfs_getattr() wants 3 args])
+ SPL_LINUX_TRY_COMPILE([
+ #include <linux/fs.h>
+ ],[
+ vfs_getattr((struct vfsmount *)NULL,
+ (struct dentry *)NULL,
+ (struct kstat *)NULL);
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_3ARGS_VFS_GETATTR, 1,
+ [vfs_getattr wants 3 args])
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+])
--- /dev/null
+dnl #
+dnl # 3.17 API change,
+dnl # wait_on_bit() no longer requires an action argument. The former
+dnl # "wait_on_bit" interface required an 'action' function to be provided
+dnl # which does the actual waiting. There were over 20 such functions in the
+dnl # kernel, many of them identical, though most cases can be satisfied by one
+dnl # of just two functions: one which uses io_schedule() and one which just
+dnl # uses schedule(). This API change was made to consolidate all of those
+dnl # redundant wait functions.
+dnl #
+AC_DEFUN([SPL_AC_WAIT_ON_BIT], [
+ AC_MSG_CHECKING([whether wait_on_bit() takes an action])
+ SPL_LINUX_TRY_COMPILE([
+ #include <linux/wait.h>
+ ],[
+ int (*action)(void *) = NULL;
+ wait_on_bit(NULL, 0, action, 0);
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_WAIT_ON_BIT_ACTION, 1, [yes])
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+])
+dnl #
+dnl # 4.13 API change
+dnl # Renamed struct wait_queue -> struct wait_queue_entry.
+dnl #
+AC_DEFUN([SPL_AC_WAIT_QUEUE_ENTRY_T], [
+ AC_MSG_CHECKING([whether wait_queue_entry_t exists])
+ SPL_LINUX_TRY_COMPILE([
+ #include <linux/wait.h>
+ ],[
+ wait_queue_entry_t *entry __attribute__ ((unused));
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_WAIT_QUEUE_ENTRY_T, 1,
+ [wait_queue_entry_t exists])
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+])
+
+dnl #
+dnl # 4.13 API change
+dnl # Renamed wait_queue_head::task_list -> wait_queue_head::head
+dnl # Renamed wait_queue_entry::task_list -> wait_queue_entry::entry
+dnl #
+AC_DEFUN([SPL_AC_WAIT_QUEUE_HEAD_ENTRY], [
+ AC_MSG_CHECKING([whether wq_head->head and wq_entry->entry exist])
+ SPL_LINUX_TRY_COMPILE([
+ #include <linux/wait.h>
+
+ #ifdef HAVE_WAIT_QUEUE_ENTRY_T
+ typedef wait_queue_head_t spl_wait_queue_head_t;
+ typedef wait_queue_entry_t spl_wait_queue_entry_t;
+ #else
+ typedef wait_queue_head_t spl_wait_queue_head_t;
+ typedef wait_queue_t spl_wait_queue_entry_t;
+ #endif
+ ],[
+ spl_wait_queue_head_t wq_head;
+ spl_wait_queue_entry_t wq_entry;
+ struct list_head *head __attribute__ ((unused));
+ struct list_head *entry __attribute__ ((unused));
+
+ head = &wq_head.head;
+ entry = &wq_entry.entry;
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_WAIT_QUEUE_HEAD_ENTRY, 1,
+ [wq_head->head and wq_entry->entry exist])
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+])
--- /dev/null
+dnl #
+dnl # zlib inflate compat,
+dnl # Verify the kernel has CONFIG_ZLIB_INFLATE support enabled.
+dnl #
+AC_DEFUN([SPL_AC_CONFIG_ZLIB_INFLATE], [
+ AC_MSG_CHECKING([whether CONFIG_ZLIB_INFLATE is defined])
+ SPL_LINUX_TRY_COMPILE([
+ #if !defined(CONFIG_ZLIB_INFLATE) && \
+ !defined(CONFIG_ZLIB_INFLATE_MODULE)
+ #error CONFIG_ZLIB_INFLATE not defined
+ #endif
+ ],[ ],[
+ AC_MSG_RESULT([yes])
+ ],[
+ AC_MSG_RESULT([no])
+ AC_MSG_ERROR([
+ *** This kernel does not include the required zlib inflate support.
+ *** Rebuild the kernel with CONFIG_ZLIB_INFLATE=y|m set.])
+ ])
+])
+
+dnl #
+dnl # zlib deflate compat,
+dnl # Verify the kernel has CONFIG_ZLIB_DEFLATE support enabled.
+dnl #
+AC_DEFUN([SPL_AC_CONFIG_ZLIB_DEFLATE], [
+ AC_MSG_CHECKING([whether CONFIG_ZLIB_DEFLATE is defined])
+ SPL_LINUX_TRY_COMPILE([
+ #if !defined(CONFIG_ZLIB_DEFLATE) && \
+ !defined(CONFIG_ZLIB_DEFLATE_MODULE)
+ #error CONFIG_ZLIB_DEFLATE not defined
+ #endif
+ ],[ ],[
+ AC_MSG_RESULT([yes])
+ ],[
+ AC_MSG_RESULT([no])
+ AC_MSG_ERROR([
+ *** This kernel does not include the required zlib deflate support.
+ *** Rebuild the kernel with CONFIG_ZLIB_DEFLATE=y|m set.])
+ ])
+])
+
+dnl #
+dnl # 2.6.39 API compat,
+dnl # The function zlib_deflate_workspacesize() now take 2 arguments.
+dnl # This was done to avoid always having to allocate the maximum size
+dnl # workspace (268K). The caller can now specific the windowBits and
+dnl # memLevel compression parameters to get a smaller workspace.
+dnl #
+AC_DEFUN([SPL_AC_2ARGS_ZLIB_DEFLATE_WORKSPACESIZE],
+ [AC_MSG_CHECKING([whether zlib_deflate_workspacesize() wants 2 args])
+ SPL_LINUX_TRY_COMPILE([
+ #include <linux/zlib.h>
+ ],[
+ return zlib_deflate_workspacesize(MAX_WBITS, MAX_MEM_LEVEL);
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_2ARGS_ZLIB_DEFLATE_WORKSPACESIZE, 1,
+ [zlib_deflate_workspacesize() wants 2 args])
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+])
SPL_AC_CONFIG_TRIM_UNUSED_KSYMS
SPL_AC_PDE_DATA
SPL_AC_SET_FS_PWD_WITH_CONST
- SPL_AC_2ARGS_VFS_UNLINK
- SPL_AC_4ARGS_VFS_RENAME
SPL_AC_2ARGS_VFS_FSYNC
SPL_AC_INODE_TRUNCATE_RANGE
SPL_AC_FS_STRUCT_SPINLOCK
SPL_AC_KMEM_CACHE_CREATE_USERCOPY
SPL_AC_WAIT_QUEUE_ENTRY_T
SPL_AC_WAIT_QUEUE_HEAD_ENTRY
+ SPL_AC_IO_SCHEDULE_TIMEOUT
SPL_AC_KERNEL_WRITE
SPL_AC_KERNEL_READ
SPL_AC_KERNEL_TIMER_FUNCTION_TIMER_LIST
RPM_DEFINE_COMMON='--define "$(DEBUG_SPL) 1" --define "$(DEBUG_KMEM) 1" --define "$(DEBUG_KMEM_TRACKING) 1"'
RPM_DEFINE_UTIL=
RPM_DEFINE_KMOD='--define "kernels $(LINUX_VERSION)"'
+ RPM_DEFINE_KMOD+=' --define "_wrong_version_format_terminate_build 0"'
RPM_DEFINE_DKMS=
SRPM_DEFINE_COMMON='--define "build_src_rpm 1"'
AC_MSG_CHECKING([whether kernel defines atomic64_t])
AC_MSG_RESULT([$have_atomic64_t])
])
-
-AC_DEFUN([SPL_AC_SHRINKER_CALLBACK],[
- tmp_flags="$EXTRA_KCFLAGS"
- EXTRA_KCFLAGS="-Werror"
- dnl #
- dnl # 2.6.23 to 2.6.34 API change
- dnl # ->shrink(int nr_to_scan, gfp_t gfp_mask)
- dnl #
- AC_MSG_CHECKING([whether old 2-argument shrinker exists])
- SPL_LINUX_TRY_COMPILE([
- #include <linux/mm.h>
-
- int shrinker_cb(int nr_to_scan, gfp_t gfp_mask);
- ],[
- struct shrinker cache_shrinker = {
- .shrink = shrinker_cb,
- .seeks = DEFAULT_SEEKS,
- };
- register_shrinker(&cache_shrinker);
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_2ARGS_OLD_SHRINKER_CALLBACK, 1,
- [old shrinker callback wants 2 args])
- ],[
- AC_MSG_RESULT(no)
- dnl #
- dnl # 2.6.35 - 2.6.39 API change
- dnl # ->shrink(struct shrinker *,
- dnl # int nr_to_scan, gfp_t gfp_mask)
- dnl #
- AC_MSG_CHECKING([whether old 3-argument shrinker exists])
- SPL_LINUX_TRY_COMPILE([
- #include <linux/mm.h>
-
- int shrinker_cb(struct shrinker *, int nr_to_scan,
- gfp_t gfp_mask);
- ],[
- struct shrinker cache_shrinker = {
- .shrink = shrinker_cb,
- .seeks = DEFAULT_SEEKS,
- };
- register_shrinker(&cache_shrinker);
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_3ARGS_SHRINKER_CALLBACK, 1,
- [old shrinker callback wants 3 args])
- ],[
- AC_MSG_RESULT(no)
- dnl #
- dnl # 3.0 - 3.11 API change
- dnl # ->shrink(struct shrinker *,
- dnl # struct shrink_control *sc)
- dnl #
- AC_MSG_CHECKING(
- [whether new 2-argument shrinker exists])
- SPL_LINUX_TRY_COMPILE([
- #include <linux/mm.h>
-
- int shrinker_cb(struct shrinker *,
- struct shrink_control *sc);
- ],[
- struct shrinker cache_shrinker = {
- .shrink = shrinker_cb,
- .seeks = DEFAULT_SEEKS,
- };
- register_shrinker(&cache_shrinker);
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_2ARGS_NEW_SHRINKER_CALLBACK, 1,
- [new shrinker callback wants 2 args])
- ],[
- AC_MSG_RESULT(no)
- dnl #
- dnl # 3.12 API change,
- dnl # ->shrink() is logically split in to
- dnl # ->count_objects() and ->scan_objects()
- dnl #
- AC_MSG_CHECKING(
- [whether ->count_objects callback exists])
- SPL_LINUX_TRY_COMPILE([
- #include <linux/mm.h>
-
- unsigned long shrinker_cb(
- struct shrinker *,
- struct shrink_control *sc);
- ],[
- struct shrinker cache_shrinker = {
- .count_objects = shrinker_cb,
- .scan_objects = shrinker_cb,
- .seeks = DEFAULT_SEEKS,
- };
- register_shrinker(&cache_shrinker);
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_SPLIT_SHRINKER_CALLBACK,
- 1, [->count_objects exists])
- ],[
- AC_MSG_ERROR(error)
- ])
- ])
- ])
- ])
- EXTRA_KCFLAGS="$tmp_flags"
-])
-
-dnl #
-dnl # 2.6.33 API change,
-dnl # Removed .ctl_name from struct ctl_table.
-dnl #
-AC_DEFUN([SPL_AC_CTL_NAME], [
- AC_MSG_CHECKING([whether struct ctl_table has ctl_name])
- SPL_LINUX_TRY_COMPILE([
- #include <linux/sysctl.h>
- ],[
- struct ctl_table ctl __attribute__ ((unused));
- ctl.ctl_name = 0;
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_CTL_NAME, 1, [struct ctl_table has ctl_name])
- ],[
- AC_MSG_RESULT(no)
- ])
-])
-
-dnl #
-dnl # 3.10 API change,
-dnl # PDE is replaced by PDE_DATA
-dnl #
-AC_DEFUN([SPL_AC_PDE_DATA], [
- AC_MSG_CHECKING([whether PDE_DATA() is available])
- SPL_LINUX_TRY_COMPILE_SYMBOL([
- #include <linux/proc_fs.h>
- ], [
- PDE_DATA(NULL);
- ], [PDE_DATA], [], [
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_PDE_DATA, 1, [yes])
- ],[
- AC_MSG_RESULT(no)
- ])
-])
-
-dnl #
-dnl # 3.9 API change
-dnl # set_fs_pwd takes const struct path *
-dnl #
-AC_DEFUN([SPL_AC_SET_FS_PWD_WITH_CONST],
- tmp_flags="$EXTRA_KCFLAGS"
- EXTRA_KCFLAGS="-Werror"
- [AC_MSG_CHECKING([whether set_fs_pwd() requires const struct path *])
- SPL_LINUX_TRY_COMPILE([
- #include <linux/spinlock.h>
- #include <linux/fs_struct.h>
- #include <linux/path.h>
- void (*const set_fs_pwd_func)
- (struct fs_struct *, const struct path *)
- = set_fs_pwd;
- ],[
- return 0;
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_SET_FS_PWD_WITH_CONST, 1,
- [set_fs_pwd() needs const path *])
- ],[
- SPL_LINUX_TRY_COMPILE([
- #include <linux/spinlock.h>
- #include <linux/fs_struct.h>
- #include <linux/path.h>
- void (*const set_fs_pwd_func)
- (struct fs_struct *, struct path *)
- = set_fs_pwd;
- ],[
- return 0;
- ],[
- AC_MSG_RESULT(no)
- ],[
- AC_MSG_ERROR(unknown)
- ])
- ])
- EXTRA_KCFLAGS="$tmp_flags"
-])
-
-dnl #
-dnl # 3.13 API change
-dnl # vfs_unlink() updated to take a third delegated_inode argument.
-dnl #
-AC_DEFUN([SPL_AC_2ARGS_VFS_UNLINK],
- [AC_MSG_CHECKING([whether vfs_unlink() wants 2 args])
- SPL_LINUX_TRY_COMPILE([
- #include <linux/fs.h>
- ],[
- vfs_unlink((struct inode *) NULL, (struct dentry *) NULL);
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_2ARGS_VFS_UNLINK, 1,
- [vfs_unlink() wants 2 args])
- ],[
- AC_MSG_RESULT(no)
- dnl #
- dnl # Linux 3.13 API change
- dnl # Added delegated inode
- dnl #
- AC_MSG_CHECKING([whether vfs_unlink() wants 3 args])
- SPL_LINUX_TRY_COMPILE([
- #include <linux/fs.h>
- ],[
- vfs_unlink((struct inode *) NULL,
- (struct dentry *) NULL,
- (struct inode **) NULL);
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_3ARGS_VFS_UNLINK, 1,
- [vfs_unlink() wants 3 args])
- ],[
- AC_MSG_ERROR(no)
- ])
-
- ])
-])
-
-dnl #
-dnl # 3.13 and 3.15 API changes
-dnl # Added delegated inode and flags argument.
-dnl #
-AC_DEFUN([SPL_AC_4ARGS_VFS_RENAME],
- [AC_MSG_CHECKING([whether vfs_rename() wants 4 args])
- SPL_LINUX_TRY_COMPILE([
- #include <linux/fs.h>
- ],[
- vfs_rename((struct inode *) NULL, (struct dentry *) NULL,
- (struct inode *) NULL, (struct dentry *) NULL);
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_4ARGS_VFS_RENAME, 1,
- [vfs_rename() wants 4 args])
- ],[
- AC_MSG_RESULT(no)
- dnl #
- dnl # Linux 3.13 API change
- dnl # Added delegated inode
- dnl #
- AC_MSG_CHECKING([whether vfs_rename() wants 5 args])
- SPL_LINUX_TRY_COMPILE([
- #include <linux/fs.h>
- ],[
- vfs_rename((struct inode *) NULL,
- (struct dentry *) NULL,
- (struct inode *) NULL,
- (struct dentry *) NULL,
- (struct inode **) NULL);
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_5ARGS_VFS_RENAME, 1,
- [vfs_rename() wants 5 args])
- ],[
- AC_MSG_RESULT(no)
- dnl #
- dnl # Linux 3.15 API change
- dnl # Added flags
- dnl #
- AC_MSG_CHECKING([whether vfs_rename() wants 6 args])
- SPL_LINUX_TRY_COMPILE([
- #include <linux/fs.h>
- ],[
- vfs_rename((struct inode *) NULL,
- (struct dentry *) NULL,
- (struct inode *) NULL,
- (struct dentry *) NULL,
- (struct inode **) NULL,
- (unsigned int) 0);
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_6ARGS_VFS_RENAME, 1,
- [vfs_rename() wants 6 args])
- ],[
- AC_MSG_ERROR(no)
- ])
- ])
- ])
-])
-
-dnl #
-dnl # 2.6.36 API change,
-dnl # The 'struct fs_struct->lock' was changed from a rwlock_t to
-dnl # a spinlock_t to improve the fastpath performance.
-dnl #
-AC_DEFUN([SPL_AC_FS_STRUCT_SPINLOCK], [
- AC_MSG_CHECKING([whether struct fs_struct uses spinlock_t])
- tmp_flags="$EXTRA_KCFLAGS"
- EXTRA_KCFLAGS="-Werror"
- SPL_LINUX_TRY_COMPILE([
- #include <linux/sched.h>
- #include <linux/fs_struct.h>
- ],[
- static struct fs_struct fs;
- spin_lock_init(&fs.lock);
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_FS_STRUCT_SPINLOCK, 1,
- [struct fs_struct uses spinlock_t])
- ],[
- AC_MSG_RESULT(no)
- ])
- EXTRA_KCFLAGS="$tmp_flags"
-])
-
-dnl #
-dnl # User namespaces, use kuid_t in place of uid_t
-dnl # where available. Not strictly a user namespaces thing
-dnl # but it should prevent surprises
-dnl #
-AC_DEFUN([SPL_AC_KUIDGID_T], [
- AC_MSG_CHECKING([whether kuid_t/kgid_t is available])
- SPL_LINUX_TRY_COMPILE([
- #include <linux/uidgid.h>
- ], [
- kuid_t userid = KUIDT_INIT(0);
- kgid_t groupid = KGIDT_INIT(0);
- ],[
- SPL_LINUX_TRY_COMPILE([
- #include <linux/uidgid.h>
- ], [
- kuid_t userid = 0;
- kgid_t groupid = 0;
- ],[
- AC_MSG_RESULT(yes; optional)
- ],[
- AC_MSG_RESULT(yes; mandatory)
- AC_DEFINE(HAVE_KUIDGID_T, 1, [kuid_t/kgid_t in use])
- ])
- ],[
- AC_MSG_RESULT(no)
- ])
-])
-
-dnl #
-dnl # 2.6.35 API change,
-dnl # Unused 'struct dentry *' removed from vfs_fsync() prototype.
-dnl #
-AC_DEFUN([SPL_AC_2ARGS_VFS_FSYNC], [
- AC_MSG_CHECKING([whether vfs_fsync() wants 2 args])
- SPL_LINUX_TRY_COMPILE([
- #include <linux/fs.h>
- ],[
- vfs_fsync(NULL, 0);
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_2ARGS_VFS_FSYNC, 1, [vfs_fsync() wants 2 args])
- ],[
- AC_MSG_RESULT(no)
- ])
-])
-
-dnl #
-dnl # 3.5 API change,
-dnl # inode_operations.truncate_range removed
-dnl #
-AC_DEFUN([SPL_AC_INODE_TRUNCATE_RANGE], [
- AC_MSG_CHECKING([whether truncate_range() inode operation is available])
- SPL_LINUX_TRY_COMPILE([
- #include <linux/fs.h>
- ],[
- struct inode_operations ops;
- ops.truncate_range = NULL;
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_INODE_TRUNCATE_RANGE, 1,
- [truncate_range() inode operation is available])
- ],[
- AC_MSG_RESULT(no)
- ])
-])
-
-dnl #
-dnl # Linux 2.6.38 - 3.x API
-dnl #
-AC_DEFUN([SPL_AC_KERNEL_FILE_FALLOCATE], [
- AC_MSG_CHECKING([whether fops->fallocate() exists])
- SPL_LINUX_TRY_COMPILE([
- #include <linux/fs.h>
- ],[
- long (*fallocate) (struct file *, int, loff_t, loff_t) = NULL;
- struct file_operations fops __attribute__ ((unused)) = {
- .fallocate = fallocate,
- };
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_FILE_FALLOCATE, 1, [fops->fallocate() exists])
- ],[
- AC_MSG_RESULT(no)
- ])
-])
-
-dnl #
-dnl # Linux 2.6.x - 2.6.37 API
-dnl #
-AC_DEFUN([SPL_AC_KERNEL_INODE_FALLOCATE], [
- AC_MSG_CHECKING([whether iops->fallocate() exists])
- SPL_LINUX_TRY_COMPILE([
- #include <linux/fs.h>
- ],[
- long (*fallocate) (struct inode *, int, loff_t, loff_t) = NULL;
- struct inode_operations fops __attribute__ ((unused)) = {
- .fallocate = fallocate,
- };
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_INODE_FALLOCATE, 1, [fops->fallocate() exists])
- ],[
- AC_MSG_RESULT(no)
- ])
-])
-
-dnl #
-dnl # PaX Linux 2.6.38 - 3.x API
-dnl #
-AC_DEFUN([SPL_AC_PAX_KERNEL_FILE_FALLOCATE], [
- AC_MSG_CHECKING([whether fops->fallocate() exists])
- SPL_LINUX_TRY_COMPILE([
- #include <linux/fs.h>
- ],[
- long (*fallocate) (struct file *, int, loff_t, loff_t) = NULL;
- struct file_operations_no_const fops __attribute__ ((unused)) = {
- .fallocate = fallocate,
- };
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_FILE_FALLOCATE, 1, [fops->fallocate() exists])
- ],[
- AC_MSG_RESULT(no)
- ])
-])
-
-dnl #
-dnl # The fallocate callback was moved from the inode_operations
-dnl # structure to the file_operations structure.
-dnl #
-AC_DEFUN([SPL_AC_KERNEL_FALLOCATE], [
- SPL_AC_KERNEL_FILE_FALLOCATE
- SPL_AC_KERNEL_INODE_FALLOCATE
- SPL_AC_PAX_KERNEL_FILE_FALLOCATE
-])
-
-dnl #
-dnl # zlib inflate compat,
-dnl # Verify the kernel has CONFIG_ZLIB_INFLATE support enabled.
-dnl #
-AC_DEFUN([SPL_AC_CONFIG_ZLIB_INFLATE], [
- AC_MSG_CHECKING([whether CONFIG_ZLIB_INFLATE is defined])
- SPL_LINUX_TRY_COMPILE([
- #if !defined(CONFIG_ZLIB_INFLATE) && \
- !defined(CONFIG_ZLIB_INFLATE_MODULE)
- #error CONFIG_ZLIB_INFLATE not defined
- #endif
- ],[ ],[
- AC_MSG_RESULT([yes])
- ],[
- AC_MSG_RESULT([no])
- AC_MSG_ERROR([
- *** This kernel does not include the required zlib inflate support.
- *** Rebuild the kernel with CONFIG_ZLIB_INFLATE=y|m set.])
- ])
-])
-
-dnl #
-dnl # zlib deflate compat,
-dnl # Verify the kernel has CONFIG_ZLIB_DEFLATE support enabled.
-dnl #
-AC_DEFUN([SPL_AC_CONFIG_ZLIB_DEFLATE], [
- AC_MSG_CHECKING([whether CONFIG_ZLIB_DEFLATE is defined])
- SPL_LINUX_TRY_COMPILE([
- #if !defined(CONFIG_ZLIB_DEFLATE) && \
- !defined(CONFIG_ZLIB_DEFLATE_MODULE)
- #error CONFIG_ZLIB_DEFLATE not defined
- #endif
- ],[ ],[
- AC_MSG_RESULT([yes])
- ],[
- AC_MSG_RESULT([no])
- AC_MSG_ERROR([
- *** This kernel does not include the required zlib deflate support.
- *** Rebuild the kernel with CONFIG_ZLIB_DEFLATE=y|m set.])
- ])
-])
-
-dnl #
-dnl # config trim unused symbols,
-dnl # Verify the kernel has CONFIG_TRIM_UNUSED_KSYMS DISABLED.
-dnl #
-AC_DEFUN([SPL_AC_CONFIG_TRIM_UNUSED_KSYMS], [
- AC_MSG_CHECKING([whether CONFIG_TRIM_UNUSED_KSYM is disabled])
- SPL_LINUX_TRY_COMPILE([
- #if defined(CONFIG_TRIM_UNUSED_KSYMS)
- #error CONFIG_TRIM_UNUSED_KSYMS not defined
- #endif
- ],[ ],[
- AC_MSG_RESULT([yes])
- ],[
- AC_MSG_RESULT([no])
- AC_MSG_ERROR([
- *** This kernel has unused symbols trimming enabled, please disable.
- *** Rebuild the kernel with CONFIG_TRIM_UNUSED_KSYMS=n set.])
- ])
-])
-
-dnl #
-dnl # 2.6.39 API compat,
-dnl # The function zlib_deflate_workspacesize() now take 2 arguments.
-dnl # This was done to avoid always having to allocate the maximum size
-dnl # workspace (268K). The caller can now specific the windowBits and
-dnl # memLevel compression parameters to get a smaller workspace.
-dnl #
-AC_DEFUN([SPL_AC_2ARGS_ZLIB_DEFLATE_WORKSPACESIZE],
- [AC_MSG_CHECKING([whether zlib_deflate_workspacesize() wants 2 args])
- SPL_LINUX_TRY_COMPILE([
- #include <linux/zlib.h>
- ],[
- return zlib_deflate_workspacesize(MAX_WBITS, MAX_MEM_LEVEL);
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_2ARGS_ZLIB_DEFLATE_WORKSPACESIZE, 1,
- [zlib_deflate_workspacesize() wants 2 args])
- ],[
- AC_MSG_RESULT(no)
- ])
-])
-
-dnl #
-dnl # 2.6.39 API change,
-dnl # Shrinker adjust to use common shrink_control structure.
-dnl #
-AC_DEFUN([SPL_AC_SHRINK_CONTROL_STRUCT], [
- AC_MSG_CHECKING([whether struct shrink_control exists])
- SPL_LINUX_TRY_COMPILE([
- #include <linux/mm.h>
- ],[
- struct shrink_control sc __attribute__ ((unused));
-
- sc.nr_to_scan = 0;
- sc.gfp_mask = GFP_KERNEL;
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_SHRINK_CONTROL_STRUCT, 1,
- [struct shrink_control exists])
- ],[
- AC_MSG_RESULT(no)
- ])
-])
-
-dnl #
-dnl # 3.1 API Change
-dnl #
-dnl # The rw_semaphore.wait_lock member was changed from spinlock_t to
-dnl # raw_spinlock_t at commit ddb6c9b58a19edcfac93ac670b066c836ff729f1.
-dnl #
-AC_DEFUN([SPL_AC_RWSEM_SPINLOCK_IS_RAW], [
- AC_MSG_CHECKING([whether struct rw_semaphore member wait_lock is raw])
- tmp_flags="$EXTRA_KCFLAGS"
- EXTRA_KCFLAGS="-Werror"
- SPL_LINUX_TRY_COMPILE([
- #include <linux/rwsem.h>
- ],[
- struct rw_semaphore dummy_semaphore __attribute__ ((unused));
- raw_spinlock_t dummy_lock __attribute__ ((unused)) =
- __RAW_SPIN_LOCK_INITIALIZER(dummy_lock);
- dummy_semaphore.wait_lock = dummy_lock;
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(RWSEM_SPINLOCK_IS_RAW, 1,
- [struct rw_semaphore member wait_lock is raw_spinlock_t])
- ],[
- AC_MSG_RESULT(no)
- ])
- EXTRA_KCFLAGS="$tmp_flags"
-])
-
-dnl #
-dnl # 3.16 API Change
-dnl #
-dnl # rwsem-spinlock "->activity" changed to "->count"
-dnl #
-AC_DEFUN([SPL_AC_RWSEM_ACTIVITY], [
- AC_MSG_CHECKING([whether struct rw_semaphore has member activity])
- tmp_flags="$EXTRA_KCFLAGS"
- EXTRA_KCFLAGS="-Werror"
- SPL_LINUX_TRY_COMPILE([
- #include <linux/rwsem.h>
- ],[
- struct rw_semaphore dummy_semaphore __attribute__ ((unused));
- dummy_semaphore.activity = 0;
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_RWSEM_ACTIVITY, 1,
- [struct rw_semaphore has member activity])
- ],[
- AC_MSG_RESULT(no)
- ])
- EXTRA_KCFLAGS="$tmp_flags"
-])
-
-dnl #
-dnl # 4.8 API Change
-dnl #
-dnl # rwsem "->count" changed to atomic_long_t type
-dnl #
-AC_DEFUN([SPL_AC_RWSEM_ATOMIC_LONG_COUNT], [
- AC_MSG_CHECKING(
- [whether struct rw_semaphore has atomic_long_t member count])
- tmp_flags="$EXTRA_KCFLAGS"
- EXTRA_KCFLAGS="-Werror"
- SPL_LINUX_TRY_COMPILE([
- #include <linux/rwsem.h>
- ],[
- DECLARE_RWSEM(dummy_semaphore);
- (void) atomic_long_read(&dummy_semaphore.count);
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_RWSEM_ATOMIC_LONG_COUNT, 1,
- [struct rw_semaphore has atomic_long_t member count])
- ],[
- AC_MSG_RESULT(no)
- ])
- EXTRA_KCFLAGS="$tmp_flags"
-])
-
-dnl #
-dnl # 3.9 API change,
-dnl # Moved things from linux/sched.h to linux/sched/rt.h
-dnl #
-AC_DEFUN([SPL_AC_SCHED_RT_HEADER],
- [AC_MSG_CHECKING([whether header linux/sched/rt.h exists])
- SPL_LINUX_TRY_COMPILE([
- #include <linux/sched.h>
- #include <linux/sched/rt.h>
- ],[
- return 0;
- ],[
- AC_DEFINE(HAVE_SCHED_RT_HEADER, 1, [linux/sched/rt.h exists])
- AC_MSG_RESULT(yes)
- ],[
- AC_MSG_RESULT(no)
- ])
-])
-
-dnl #
-dnl # 4.11 API change,
-dnl # Moved things from linux/sched.h to linux/sched/signal.h
-dnl #
-AC_DEFUN([SPL_AC_SCHED_SIGNAL_HEADER],
- [AC_MSG_CHECKING([whether header linux/sched/signal.h exists])
- SPL_LINUX_TRY_COMPILE([
- #include <linux/sched.h>
- #include <linux/sched/signal.h>
- ],[
- return 0;
- ],[
- AC_DEFINE(HAVE_SCHED_SIGNAL_HEADER, 1, [linux/sched/signal.h exists])
- AC_MSG_RESULT(yes)
- ],[
- AC_MSG_RESULT(no)
- ])
-])
-
-dnl #
-dnl # 4.11 API, a528d35e@torvalds/linux
-dnl # vfs_getattr(const struct path *p, struct kstat *s, u32 m, unsigned int f)
-dnl #
-AC_DEFUN([SPL_AC_4ARGS_VFS_GETATTR], [
- AC_MSG_CHECKING([whether vfs_getattr() wants 4 args])
- SPL_LINUX_TRY_COMPILE([
- #include <linux/fs.h>
- ],[
- vfs_getattr((const struct path *)NULL,
- (struct kstat *)NULL,
- (u32)0,
- (unsigned int)0);
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_4ARGS_VFS_GETATTR, 1,
- [vfs_getattr wants 4 args])
- ],[
- AC_MSG_RESULT(no)
- ])
-])
-
-dnl #
-dnl # 3.9 API
-dnl # vfs_getattr(struct path *p, struct kstat *s)
-dnl #
-AC_DEFUN([SPL_AC_2ARGS_VFS_GETATTR], [
- AC_MSG_CHECKING([whether vfs_getattr() wants 2 args])
- SPL_LINUX_TRY_COMPILE([
- #include <linux/fs.h>
- ],[
- vfs_getattr((struct path *) NULL,
- (struct kstat *)NULL);
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_2ARGS_VFS_GETATTR, 1,
- [vfs_getattr wants 2 args])
- ],[
- AC_MSG_RESULT(no)
- ])
-])
-
-dnl #
-dnl # <3.9 API
-dnl # vfs_getattr(struct vfsmount *v, struct dentry *d, struct kstat *k)
-dnl #
-AC_DEFUN([SPL_AC_3ARGS_VFS_GETATTR], [
- AC_MSG_CHECKING([whether vfs_getattr() wants 3 args])
- SPL_LINUX_TRY_COMPILE([
- #include <linux/fs.h>
- ],[
- vfs_getattr((struct vfsmount *)NULL,
- (struct dentry *)NULL,
- (struct kstat *)NULL);
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_3ARGS_VFS_GETATTR, 1,
- [vfs_getattr wants 3 args])
- ],[
- AC_MSG_RESULT(no)
- ])
-])
-
-dnl #
-dnl # 2.6.36 API compatibility.
-dnl # Added usleep_range timer.
-dnl # usleep_range is a finer precision implementation of msleep
-dnl # designed to be a drop-in replacement for udelay where a precise
-dnl # sleep / busy-wait is unnecessary.
-dnl #
-AC_DEFUN([SPL_AC_USLEEP_RANGE], [
- AC_MSG_CHECKING([whether usleep_range() is available])
- SPL_LINUX_TRY_COMPILE([
- #include <linux/delay.h>
- ],[
- usleep_range(0, 0);
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_USLEEP_RANGE, 1,
- [usleep_range is available])
- ],[
- AC_MSG_RESULT(no)
- ])
-])
-
-dnl #
-dnl # 2.6.35 API change,
-dnl # The cachep->gfpflags member was renamed cachep->allocflags. These are
-dnl # private allocation flags which are applied when allocating a new slab
-dnl # in kmem_getpages(). Unfortunately there is no public API for setting
-dnl # non-default flags.
-dnl #
-AC_DEFUN([SPL_AC_KMEM_CACHE_ALLOCFLAGS], [
- AC_MSG_CHECKING([whether struct kmem_cache has allocflags])
- SPL_LINUX_TRY_COMPILE([
- #include <linux/slab.h>
- ],[
- struct kmem_cache cachep __attribute__ ((unused));
- cachep.allocflags = GFP_KERNEL;
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_KMEM_CACHE_ALLOCFLAGS, 1,
- [struct kmem_cache has allocflags])
- ],[
- AC_MSG_RESULT(no)
-
- AC_MSG_CHECKING([whether struct kmem_cache has gfpflags])
- SPL_LINUX_TRY_COMPILE([
- #include <linux/slab.h>
- ],[
- struct kmem_cache cachep __attribute__ ((unused));
- cachep.gfpflags = GFP_KERNEL;
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_KMEM_CACHE_GFPFLAGS, 1,
- [struct kmem_cache has gfpflags])
- ],[
- AC_MSG_RESULT(no)
- ])
- ])
-])
-
-dnl #
-dnl # 3.17 API change,
-dnl # wait_on_bit() no longer requires an action argument. The former
-dnl # "wait_on_bit" interface required an 'action' function to be provided
-dnl # which does the actual waiting. There were over 20 such functions in the
-dnl # kernel, many of them identical, though most cases can be satisfied by one
-dnl # of just two functions: one which uses io_schedule() and one which just
-dnl # uses schedule(). This API change was made to consolidate all of those
-dnl # redundant wait functions.
-dnl #
-AC_DEFUN([SPL_AC_WAIT_ON_BIT], [
- AC_MSG_CHECKING([whether wait_on_bit() takes an action])
- SPL_LINUX_TRY_COMPILE([
- #include <linux/wait.h>
- ],[
- int (*action)(void *) = NULL;
- wait_on_bit(NULL, 0, action, 0);
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_WAIT_ON_BIT_ACTION, 1, [yes])
- ],[
- AC_MSG_RESULT(no)
- ])
-])
-
-dnl #
-dnl # 4.7 API change
-dnl # i_mutex is changed to i_rwsem. Instead of directly using
-dnl # i_mutex/i_rwsem, we should use inode_lock() and inode_lock_shared()
-dnl # We test inode_lock_shared because inode_lock is introduced earlier.
-dnl #
-AC_DEFUN([SPL_AC_INODE_LOCK], [
- AC_MSG_CHECKING([whether inode_lock_shared() exists])
- tmp_flags="$EXTRA_KCFLAGS"
- EXTRA_KCFLAGS="-Werror"
- SPL_LINUX_TRY_COMPILE([
- #include <linux/fs.h>
- ],[
- struct inode *inode = NULL;
- inode_lock_shared(inode);
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_INODE_LOCK_SHARED, 1, [yes])
- ],[
- AC_MSG_RESULT(no)
- ])
- EXTRA_KCFLAGS="$tmp_flags"
-])
-
-dnl #
-dnl # 4.9 API change
-dnl # group_info changed from 2d array via >blocks to 1d array via ->gid
-dnl #
-AC_DEFUN([SPL_AC_GROUP_INFO_GID], [
- AC_MSG_CHECKING([whether group_info->gid exists])
- tmp_flags="$EXTRA_KCFLAGS"
- EXTRA_KCFLAGS="-Werror"
- SPL_LINUX_TRY_COMPILE([
- #include <linux/cred.h>
- ],[
- struct group_info *gi = groups_alloc(1);
- gi->gid[0] = KGIDT_INIT(0);
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_GROUP_INFO_GID, 1, [group_info->gid exists])
- ],[
- AC_MSG_RESULT(no)
- ])
- EXTRA_KCFLAGS="$tmp_flags"
-])
-
-dnl #
-dnl # grsecurity API change,
-dnl # kmem_cache_create() with SLAB_USERCOPY flag replaced by
-dnl # kmem_cache_create_usercopy().
-dnl #
-AC_DEFUN([SPL_AC_KMEM_CACHE_CREATE_USERCOPY], [
- AC_MSG_CHECKING([whether kmem_cache_create_usercopy() exists])
- tmp_flags="$EXTRA_KCFLAGS"
- EXTRA_KCFLAGS="-Werror"
- SPL_LINUX_TRY_COMPILE([
- #include <linux/slab.h>
- static void ctor(void *foo)
- {
- // fake ctor
- }
- ],[
- struct kmem_cache *skc_linux_cache;
- const char *name = "test";
- size_t size = 4096;
- size_t align = 8;
- unsigned long flags = 0;
- size_t useroffset = 0;
- size_t usersize = size - useroffset;
-
- skc_linux_cache = kmem_cache_create_usercopy(
- name, size, align, flags, useroffset, usersize, ctor);
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_KMEM_CACHE_CREATE_USERCOPY, 1,
- [kmem_cache_create_usercopy() exists])
- ],[
- AC_MSG_RESULT(no)
- ])
- EXTRA_KCFLAGS="$tmp_flags"
-])
-
-dnl #
-dnl # 4.13 API change
-dnl # Renamed struct wait_queue -> struct wait_queue_entry.
-dnl #
-AC_DEFUN([SPL_AC_WAIT_QUEUE_ENTRY_T], [
- AC_MSG_CHECKING([whether wait_queue_entry_t exists])
- SPL_LINUX_TRY_COMPILE([
- #include <linux/wait.h>
- ],[
- wait_queue_entry_t *entry __attribute__ ((unused));
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_WAIT_QUEUE_ENTRY_T, 1,
- [wait_queue_entry_t exists])
- ],[
- AC_MSG_RESULT(no)
- ])
-])
-
-dnl #
-dnl # 4.13 API change
-dnl # Renamed wait_queue_head::task_list -> wait_queue_head::head
-dnl # Renamed wait_queue_entry::task_list -> wait_queue_entry::entry
-dnl #
-AC_DEFUN([SPL_AC_WAIT_QUEUE_HEAD_ENTRY], [
- AC_MSG_CHECKING([whether wq_head->head and wq_entry->entry exist])
- SPL_LINUX_TRY_COMPILE([
- #include <linux/wait.h>
-
- #ifdef HAVE_WAIT_QUEUE_ENTRY_T
- typedef wait_queue_head_t spl_wait_queue_head_t;
- typedef wait_queue_entry_t spl_wait_queue_entry_t;
- #else
- typedef wait_queue_head_t spl_wait_queue_head_t;
- typedef wait_queue_t spl_wait_queue_entry_t;
- #endif
- ],[
- spl_wait_queue_head_t wq_head;
- spl_wait_queue_entry_t wq_entry;
- struct list_head *head __attribute__ ((unused));
- struct list_head *entry __attribute__ ((unused));
-
- head = &wq_head.head;
- entry = &wq_entry.entry;
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_WAIT_QUEUE_HEAD_ENTRY, 1,
- [wq_head->head and wq_entry->entry exist])
- ],[
- AC_MSG_RESULT(no)
- ])
-])
-
-dnl #
-dnl # 4.14 API change
-dnl # kernel_write() which was introduced in 3.9 was updated to take
-dnl # the offset as a pointer which is needed by vn_rdwr().
-dnl #
-AC_DEFUN([SPL_AC_KERNEL_WRITE], [
- AC_MSG_CHECKING([whether kernel_write() takes loff_t pointer])
- tmp_flags="$EXTRA_KCFLAGS"
- EXTRA_KCFLAGS="-Werror"
- SPL_LINUX_TRY_COMPILE([
- #include <linux/fs.h>
- ],[
- struct file *file = NULL;
- const void *buf = NULL;
- size_t count = 0;
- loff_t *pos = NULL;
- ssize_t ret;
-
- ret = kernel_write(file, buf, count, pos);
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_KERNEL_WRITE_PPOS, 1,
- [kernel_write() take loff_t pointer])
- ],[
- AC_MSG_RESULT(no)
- ])
- EXTRA_KCFLAGS="$tmp_flags"
-])
-
-dnl #
-dnl # 4.14 API change
-dnl # kernel_read() which has existed for forever was updated to take
-dnl # the offset as a pointer which is needed by vn_rdwr().
-dnl #
-AC_DEFUN([SPL_AC_KERNEL_READ], [
- AC_MSG_CHECKING([whether kernel_read() takes loff_t pointer])
- tmp_flags="$EXTRA_KCFLAGS"
- EXTRA_KCFLAGS="-Werror"
- SPL_LINUX_TRY_COMPILE([
- #include <linux/fs.h>
- ],[
- struct file *file = NULL;
- void *buf = NULL;
- size_t count = 0;
- loff_t *pos = NULL;
- ssize_t ret;
-
- ret = kernel_read(file, buf, count, pos);
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_KERNEL_READ_PPOS, 1,
- [kernel_read() take loff_t pointer])
- ],[
- AC_MSG_RESULT(no)
- ])
- EXTRA_KCFLAGS="$tmp_flags"
-])
-
-dnl #
-dnl # 4.15 API change
-dnl # https://lkml.org/lkml/2017/11/25/90
-dnl # Check if timer_list.func get passed a timer_list or an unsigned long
-dnl # (older kernels). Also sanity check the from_timer() and timer_setup()
-dnl # macros are available as well, since they will be used in the same newer
-dnl # kernels that support the new timer_list.func signature.
-dnl #
-AC_DEFUN([SPL_AC_KERNEL_TIMER_FUNCTION_TIMER_LIST], [
- AC_MSG_CHECKING([whether timer_list.function gets a timer_list])
- tmp_flags="$EXTRA_KCFLAGS"
- EXTRA_KCFLAGS="-Werror"
- SPL_LINUX_TRY_COMPILE([
- #include <linux/timer.h>
- void task_expire(struct timer_list *tl) {}
- ],[
- #ifndef from_timer
- #error "No from_timer() macro"
- #endif
-
- struct timer_list timer;
- timer.function = task_expire;
- timer_setup(&timer, NULL, 0);
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_KERNEL_TIMER_FUNCTION_TIMER_LIST, 1,
- [timer_list.function gets a timer_list])
- ],[
- AC_MSG_RESULT(no)
- ])
- EXTRA_KCFLAGS="$tmp_flags"
-])
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.63 for spl 0.7.6.
+# Generated by GNU Autoconf 2.63 for spl 0.7.8.
#
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
# 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
# Identity of this package.
PACKAGE_NAME='spl'
PACKAGE_TARNAME='spl'
-PACKAGE_VERSION='0.7.6'
-PACKAGE_STRING='spl 0.7.6'
+PACKAGE_VERSION='0.7.8'
+PACKAGE_STRING='spl 0.7.8'
PACKAGE_BUGREPORT=''
# Factoring default headers for most tests.
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures spl 0.7.6 to adapt to many kinds of systems.
+\`configure' configures spl 0.7.8 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of spl 0.7.6:";;
+ short | recursive ) echo "Configuration of spl 0.7.8:";;
esac
cat <<\_ACEOF
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-spl configure 0.7.6
+spl configure 0.7.8
generated by GNU Autoconf 2.63
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by spl $as_me 0.7.6, which was
+It was created by spl $as_me 0.7.8, which was
generated by GNU Autoconf 2.63. Invocation command line was
$ $0 $@
# Define the identity of the package.
PACKAGE='spl'
- VERSION='0.7.6'
+ VERSION='0.7.8'
cat >>confdefs.h <<_ACEOF
RPM_DEFINE_COMMON='--define "$(DEBUG_SPL) 1" --define "$(DEBUG_KMEM) 1" --define "$(DEBUG_KMEM_TRACKING) 1"'
RPM_DEFINE_UTIL=
RPM_DEFINE_KMOD='--define "kernels $(LINUX_VERSION)"'
+ RPM_DEFINE_KMOD+=' --define "_wrong_version_format_terminate_build 0"'
RPM_DEFINE_DKMS=
SRPM_DEFINE_COMMON='--define "build_src_rpm 1"'
EXTRA_KCFLAGS="$tmp_flags"
- { $as_echo "$as_me:$LINENO: checking whether vfs_unlink() wants 2 args" >&5
-$as_echo_n "checking whether vfs_unlink() wants 2 args... " >&6; }
+
+ { $as_echo "$as_me:$LINENO: checking whether vfs_fsync() wants 2 args" >&5
+$as_echo_n "checking whether vfs_fsync() wants 2 args... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.c
main (void)
{
- vfs_unlink((struct inode *) NULL, (struct dentry *) NULL);
+ vfs_fsync(NULL, 0);
;
return 0;
$as_echo "yes" >&6; }
cat >>confdefs.h <<\_ACEOF
-#define HAVE_2ARGS_VFS_UNLINK 1
+#define HAVE_2ARGS_VFS_FSYNC 1
_ACEOF
{ $as_echo "$as_me:$LINENO: result: no" >&5
$as_echo "no" >&6; }
- { $as_echo "$as_me:$LINENO: checking whether vfs_unlink() wants 3 args" >&5
-$as_echo_n "checking whether vfs_unlink() wants 3 args... " >&6; }
+
+
+
+fi
+
+ rm -Rf build
+
+
+
+
+ { $as_echo "$as_me:$LINENO: checking whether truncate_range() inode operation is available" >&5
+$as_echo_n "checking whether truncate_range() inode operation is available... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.c
/* end confdefs.h. */
- #include <linux/fs.h>
+ #include <linux/fs.h>
int
main (void)
{
- vfs_unlink((struct inode *) NULL,
- (struct dentry *) NULL,
- (struct inode **) NULL);
+ struct inode_operations ops;
+ ops.truncate_range = NULL;
;
return 0;
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- { $as_echo "$as_me:$LINENO: result: yes" >&5
+ { $as_echo "$as_me:$LINENO: result: yes" >&5
$as_echo "yes" >&6; }
cat >>confdefs.h <<\_ACEOF
-#define HAVE_3ARGS_VFS_UNLINK 1
+#define HAVE_INODE_TRUNCATE_RANGE 1
_ACEOF
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- { { $as_echo "$as_me:$LINENO: error: no" >&5
-$as_echo "$as_me: error: no" >&2;}
- { (exit 1); exit 1; }; }
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
-
-
-fi
-
- rm -Rf build
-
-
-
- { $as_echo "$as_me:$LINENO: checking whether vfs_rename() wants 4 args" >&5
-$as_echo_n "checking whether vfs_rename() wants 4 args... " >&6; }
+ { $as_echo "$as_me:$LINENO: checking whether struct fs_struct uses spinlock_t" >&5
+$as_echo_n "checking whether struct fs_struct uses spinlock_t... " >&6; }
+ tmp_flags="$EXTRA_KCFLAGS"
+ EXTRA_KCFLAGS="-Werror"
cat confdefs.h - <<_ACEOF >conftest.c
/* end confdefs.h. */
- #include <linux/fs.h>
+ #include <linux/sched.h>
+ #include <linux/fs_struct.h>
int
main (void)
{
- vfs_rename((struct inode *) NULL, (struct dentry *) NULL,
- (struct inode *) NULL, (struct dentry *) NULL);
+ static struct fs_struct fs;
+ spin_lock_init(&fs.lock);
;
return 0;
$as_echo "yes" >&6; }
cat >>confdefs.h <<\_ACEOF
-#define HAVE_4ARGS_VFS_RENAME 1
+#define HAVE_FS_STRUCT_SPINLOCK 1
_ACEOF
{ $as_echo "$as_me:$LINENO: result: no" >&5
$as_echo "no" >&6; }
- { $as_echo "$as_me:$LINENO: checking whether vfs_rename() wants 5 args" >&5
-$as_echo_n "checking whether vfs_rename() wants 5 args... " >&6; }
+
+
+
+fi
+
+ rm -Rf build
+
+
+ EXTRA_KCFLAGS="$tmp_flags"
+
+
+ { $as_echo "$as_me:$LINENO: checking whether kuid_t/kgid_t is available" >&5
+$as_echo_n "checking whether kuid_t/kgid_t is available... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.c
/* end confdefs.h. */
- #include <linux/fs.h>
+ #include <linux/uidgid.h>
int
main (void)
{
- vfs_rename((struct inode *) NULL,
- (struct dentry *) NULL,
- (struct inode *) NULL,
- (struct dentry *) NULL,
- (struct inode **) NULL);
+ kuid_t userid = KUIDT_INIT(0);
+ kgid_t groupid = KGIDT_INIT(0);
;
return 0;
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_5ARGS_VFS_RENAME 1
-_ACEOF
-
-
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
- { $as_echo "$as_me:$LINENO: checking whether vfs_rename() wants 6 args" >&5
-$as_echo_n "checking whether vfs_rename() wants 6 args... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.c
/* end confdefs.h. */
- #include <linux/fs.h>
+ #include <linux/uidgid.h>
int
main (void)
{
- vfs_rename((struct inode *) NULL,
- (struct dentry *) NULL,
- (struct inode *) NULL,
- (struct dentry *) NULL,
- (struct inode **) NULL,
- (unsigned int) 0);
+ kuid_t userid = 0;
+ kgid_t groupid = 0;
;
return 0;
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_6ARGS_VFS_RENAME 1
-_ACEOF
-
+ { $as_echo "$as_me:$LINENO: result: yes; optional" >&5
+$as_echo "yes; optional" >&6; }
else
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- { { $as_echo "$as_me:$LINENO: error: no" >&5
-$as_echo "$as_me: error: no" >&2;}
- { (exit 1); exit 1; }; }
-
-
-
-fi
-
- rm -Rf build
+ { $as_echo "$as_me:$LINENO: result: yes; mandatory" >&5
+$as_echo "yes; mandatory" >&6; }
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_KUIDGID_T 1
+_ACEOF
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+
fi
- { $as_echo "$as_me:$LINENO: checking whether vfs_fsync() wants 2 args" >&5
-$as_echo_n "checking whether vfs_fsync() wants 2 args... " >&6; }
+
+ { $as_echo "$as_me:$LINENO: checking whether fops->fallocate() exists" >&5
+$as_echo_n "checking whether fops->fallocate() exists... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.c
main (void)
{
- vfs_fsync(NULL, 0);
+ long (*fallocate) (struct file *, int, loff_t, loff_t) = NULL;
+ struct file_operations fops __attribute__ ((unused)) = {
+ .fallocate = fallocate,
+ };
;
return 0;
$as_echo "yes" >&6; }
cat >>confdefs.h <<\_ACEOF
-#define HAVE_2ARGS_VFS_FSYNC 1
+#define HAVE_FILE_FALLOCATE 1
_ACEOF
- { $as_echo "$as_me:$LINENO: checking whether truncate_range() inode operation is available" >&5
-$as_echo_n "checking whether truncate_range() inode operation is available... " >&6; }
+ { $as_echo "$as_me:$LINENO: checking whether iops->fallocate() exists" >&5
+$as_echo_n "checking whether iops->fallocate() exists... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.c
main (void)
{
- struct inode_operations ops;
- ops.truncate_range = NULL;
+ long (*fallocate) (struct inode *, int, loff_t, loff_t) = NULL;
+ struct inode_operations fops __attribute__ ((unused)) = {
+ .fallocate = fallocate,
+ };
;
return 0;
$as_echo "yes" >&6; }
cat >>confdefs.h <<\_ACEOF
-#define HAVE_INODE_TRUNCATE_RANGE 1
+#define HAVE_INODE_FALLOCATE 1
_ACEOF
- { $as_echo "$as_me:$LINENO: checking whether struct fs_struct uses spinlock_t" >&5
-$as_echo_n "checking whether struct fs_struct uses spinlock_t... " >&6; }
- tmp_flags="$EXTRA_KCFLAGS"
- EXTRA_KCFLAGS="-Werror"
+ { $as_echo "$as_me:$LINENO: checking whether fops->fallocate() exists" >&5
+$as_echo_n "checking whether fops->fallocate() exists... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.c
/* end confdefs.h. */
- #include <linux/sched.h>
- #include <linux/fs_struct.h>
+ #include <linux/fs.h>
int
main (void)
{
- static struct fs_struct fs;
- spin_lock_init(&fs.lock);
+ long (*fallocate) (struct file *, int, loff_t, loff_t) = NULL;
+ struct file_operations_no_const fops __attribute__ ((unused)) = {
+ .fallocate = fallocate,
+ };
;
return 0;
$as_echo "yes" >&6; }
cat >>confdefs.h <<\_ACEOF
-#define HAVE_FS_STRUCT_SPINLOCK 1
+#define HAVE_FILE_FALLOCATE 1
_ACEOF
rm -Rf build
- EXTRA_KCFLAGS="$tmp_flags"
- { $as_echo "$as_me:$LINENO: checking whether kuid_t/kgid_t is available" >&5
-$as_echo_n "checking whether kuid_t/kgid_t is available... " >&6; }
+
+ { $as_echo "$as_me:$LINENO: checking whether CONFIG_ZLIB_INFLATE is defined" >&5
+$as_echo_n "checking whether CONFIG_ZLIB_INFLATE is defined... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.c
/* end confdefs.h. */
- #include <linux/uidgid.h>
+ #if !defined(CONFIG_ZLIB_INFLATE) && \
+ !defined(CONFIG_ZLIB_INFLATE_MODULE)
+ #error CONFIG_ZLIB_INFLATE not defined
+ #endif
int
main (void)
{
- kuid_t userid = KUIDT_INIT(0);
- kgid_t groupid = KGIDT_INIT(0);
-
;
return 0;
}
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
+ { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+ { { $as_echo "$as_me:$LINENO: error:
+ *** This kernel does not include the required zlib inflate support.
+ *** Rebuild the kernel with CONFIG_ZLIB_INFLATE=y|m set." >&5
+$as_echo "$as_me: error:
+ *** This kernel does not include the required zlib inflate support.
+ *** Rebuild the kernel with CONFIG_ZLIB_INFLATE=y|m set." >&2;}
+ { (exit 1); exit 1; }; }
+
+
+
+fi
+
+ rm -Rf build
+
+
+
+
+ { $as_echo "$as_me:$LINENO: checking whether CONFIG_ZLIB_DEFLATE is defined" >&5
+$as_echo_n "checking whether CONFIG_ZLIB_DEFLATE is defined... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.c
/* end confdefs.h. */
- #include <linux/uidgid.h>
+ #if !defined(CONFIG_ZLIB_DEFLATE) && \
+ !defined(CONFIG_ZLIB_DEFLATE_MODULE)
+ #error CONFIG_ZLIB_DEFLATE not defined
+ #endif
int
main (void)
{
- kuid_t userid = 0;
- kgid_t groupid = 0;
-
;
return 0;
}
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- { $as_echo "$as_me:$LINENO: result: yes; optional" >&5
-$as_echo "yes; optional" >&6; }
-
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- { $as_echo "$as_me:$LINENO: result: yes; mandatory" >&5
-$as_echo "yes; mandatory" >&6; }
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_KUIDGID_T 1
-_ACEOF
-
-
-
-
-fi
-
- rm -Rf build
-
-
+ { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
else
$as_echo "$as_me: failed program was:" >&5
{ $as_echo "$as_me:$LINENO: result: no" >&5
$as_echo "no" >&6; }
+ { { $as_echo "$as_me:$LINENO: error:
+ *** This kernel does not include the required zlib deflate support.
+ *** Rebuild the kernel with CONFIG_ZLIB_DEFLATE=y|m set." >&5
+$as_echo "$as_me: error:
+ *** This kernel does not include the required zlib deflate support.
+ *** Rebuild the kernel with CONFIG_ZLIB_DEFLATE=y|m set." >&2;}
+ { (exit 1); exit 1; }; }
-
-
- { $as_echo "$as_me:$LINENO: checking whether fops->fallocate() exists" >&5
-$as_echo_n "checking whether fops->fallocate() exists... " >&6; }
+ { $as_echo "$as_me:$LINENO: checking whether zlib_deflate_workspacesize() wants 2 args" >&5
+$as_echo_n "checking whether zlib_deflate_workspacesize() wants 2 args... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.c
/* end confdefs.h. */
- #include <linux/fs.h>
+ #include <linux/zlib.h>
int
main (void)
{
- long (*fallocate) (struct file *, int, loff_t, loff_t) = NULL;
- struct file_operations fops __attribute__ ((unused)) = {
- .fallocate = fallocate,
- };
+ return zlib_deflate_workspacesize(MAX_WBITS, MAX_MEM_LEVEL);
;
return 0;
$as_echo "yes" >&6; }
cat >>confdefs.h <<\_ACEOF
-#define HAVE_FILE_FALLOCATE 1
+#define HAVE_2ARGS_ZLIB_DEFLATE_WORKSPACESIZE 1
_ACEOF
- { $as_echo "$as_me:$LINENO: checking whether iops->fallocate() exists" >&5
-$as_echo_n "checking whether iops->fallocate() exists... " >&6; }
+ { $as_echo "$as_me:$LINENO: checking whether struct shrink_control exists" >&5
+$as_echo_n "checking whether struct shrink_control exists... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.c
/* end confdefs.h. */
- #include <linux/fs.h>
+ #include <linux/mm.h>
int
main (void)
{
- long (*fallocate) (struct inode *, int, loff_t, loff_t) = NULL;
- struct inode_operations fops __attribute__ ((unused)) = {
- .fallocate = fallocate,
- };
+ struct shrink_control sc __attribute__ ((unused));
+
+ sc.nr_to_scan = 0;
+ sc.gfp_mask = GFP_KERNEL;
;
return 0;
$as_echo "yes" >&6; }
cat >>confdefs.h <<\_ACEOF
-#define HAVE_INODE_FALLOCATE 1
+#define HAVE_SHRINK_CONTROL_STRUCT 1
_ACEOF
- { $as_echo "$as_me:$LINENO: checking whether fops->fallocate() exists" >&5
-$as_echo_n "checking whether fops->fallocate() exists... " >&6; }
+ { $as_echo "$as_me:$LINENO: checking whether struct rw_semaphore member wait_lock is raw" >&5
+$as_echo_n "checking whether struct rw_semaphore member wait_lock is raw... " >&6; }
+ tmp_flags="$EXTRA_KCFLAGS"
+ EXTRA_KCFLAGS="-Werror"
cat confdefs.h - <<_ACEOF >conftest.c
/* end confdefs.h. */
- #include <linux/fs.h>
+ #include <linux/rwsem.h>
int
main (void)
{
- long (*fallocate) (struct file *, int, loff_t, loff_t) = NULL;
- struct file_operations_no_const fops __attribute__ ((unused)) = {
- .fallocate = fallocate,
- };
+ struct rw_semaphore dummy_semaphore __attribute__ ((unused));
+ raw_spinlock_t dummy_lock __attribute__ ((unused)) =
+ __RAW_SPIN_LOCK_INITIALIZER(dummy_lock);
+ dummy_semaphore.wait_lock = dummy_lock;
;
return 0;
$as_echo "yes" >&6; }
cat >>confdefs.h <<\_ACEOF
-#define HAVE_FILE_FALLOCATE 1
+#define RWSEM_SPINLOCK_IS_RAW 1
_ACEOF
rm -Rf build
+ EXTRA_KCFLAGS="$tmp_flags"
-
- { $as_echo "$as_me:$LINENO: checking whether CONFIG_ZLIB_INFLATE is defined" >&5
-$as_echo_n "checking whether CONFIG_ZLIB_INFLATE is defined... " >&6; }
+ { $as_echo "$as_me:$LINENO: checking whether struct rw_semaphore has member activity" >&5
+$as_echo_n "checking whether struct rw_semaphore has member activity... " >&6; }
+ tmp_flags="$EXTRA_KCFLAGS"
+ EXTRA_KCFLAGS="-Werror"
cat confdefs.h - <<_ACEOF >conftest.c
/* end confdefs.h. */
- #if !defined(CONFIG_ZLIB_INFLATE) && \
- !defined(CONFIG_ZLIB_INFLATE_MODULE)
- #error CONFIG_ZLIB_INFLATE not defined
- #endif
+ #include <linux/rwsem.h>
int
main (void)
{
+ struct rw_semaphore dummy_semaphore __attribute__ ((unused));
+ dummy_semaphore.activity = 0;
+
;
return 0;
}
{ $as_echo "$as_me:$LINENO: result: yes" >&5
$as_echo "yes" >&6; }
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_RWSEM_ACTIVITY 1
+_ACEOF
+
+
else
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
{ $as_echo "$as_me:$LINENO: result: no" >&5
$as_echo "no" >&6; }
- { { $as_echo "$as_me:$LINENO: error:
- *** This kernel does not include the required zlib inflate support.
- *** Rebuild the kernel with CONFIG_ZLIB_INFLATE=y|m set." >&5
-$as_echo "$as_me: error:
- *** This kernel does not include the required zlib inflate support.
- *** Rebuild the kernel with CONFIG_ZLIB_INFLATE=y|m set." >&2;}
- { (exit 1); exit 1; }; }
rm -Rf build
+ EXTRA_KCFLAGS="$tmp_flags"
- { $as_echo "$as_me:$LINENO: checking whether CONFIG_ZLIB_DEFLATE is defined" >&5
-$as_echo_n "checking whether CONFIG_ZLIB_DEFLATE is defined... " >&6; }
+ { $as_echo "$as_me:$LINENO: checking whether struct rw_semaphore has atomic_long_t member count" >&5
+$as_echo_n "checking whether struct rw_semaphore has atomic_long_t member count... " >&6; }
+ tmp_flags="$EXTRA_KCFLAGS"
+ EXTRA_KCFLAGS="-Werror"
cat confdefs.h - <<_ACEOF >conftest.c
/* end confdefs.h. */
- #if !defined(CONFIG_ZLIB_DEFLATE) && \
- !defined(CONFIG_ZLIB_DEFLATE_MODULE)
- #error CONFIG_ZLIB_DEFLATE not defined
- #endif
+ #include <linux/rwsem.h>
int
main (void)
{
+ DECLARE_RWSEM(dummy_semaphore);
+ (void) atomic_long_read(&dummy_semaphore.count);
+
;
return 0;
}
{ $as_echo "$as_me:$LINENO: result: yes" >&5
$as_echo "yes" >&6; }
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_RWSEM_ATOMIC_LONG_COUNT 1
+_ACEOF
+
+
else
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
{ $as_echo "$as_me:$LINENO: result: no" >&5
$as_echo "no" >&6; }
- { { $as_echo "$as_me:$LINENO: error:
- *** This kernel does not include the required zlib deflate support.
- *** Rebuild the kernel with CONFIG_ZLIB_DEFLATE=y|m set." >&5
-$as_echo "$as_me: error:
- *** This kernel does not include the required zlib deflate support.
- *** Rebuild the kernel with CONFIG_ZLIB_DEFLATE=y|m set." >&2;}
- { (exit 1); exit 1; }; }
rm -Rf build
+ EXTRA_KCFLAGS="$tmp_flags"
- { $as_echo "$as_me:$LINENO: checking whether zlib_deflate_workspacesize() wants 2 args" >&5
-$as_echo_n "checking whether zlib_deflate_workspacesize() wants 2 args... " >&6; }
+ { $as_echo "$as_me:$LINENO: checking whether header linux/sched/rt.h exists" >&5
+$as_echo_n "checking whether header linux/sched/rt.h exists... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.c
/* end confdefs.h. */
- #include <linux/zlib.h>
+ #include <linux/sched.h>
+ #include <linux/sched/rt.h>
int
main (void)
{
- return zlib_deflate_workspacesize(MAX_WBITS, MAX_MEM_LEVEL);
+ return 0;
;
return 0;
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
cat >>confdefs.h <<\_ACEOF
-#define HAVE_2ARGS_ZLIB_DEFLATE_WORKSPACESIZE 1
+#define HAVE_SCHED_RT_HEADER 1
_ACEOF
+ { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
else
$as_echo "$as_me: failed program was:" >&5
-
- { $as_echo "$as_me:$LINENO: checking whether struct shrink_control exists" >&5
-$as_echo_n "checking whether struct shrink_control exists... " >&6; }
+ { $as_echo "$as_me:$LINENO: checking whether header linux/sched/signal.h exists" >&5
+$as_echo_n "checking whether header linux/sched/signal.h exists... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.c
/* end confdefs.h. */
- #include <linux/mm.h>
+ #include <linux/sched.h>
+ #include <linux/sched/signal.h>
int
main (void)
{
- struct shrink_control sc __attribute__ ((unused));
-
- sc.nr_to_scan = 0;
- sc.gfp_mask = GFP_KERNEL;
+ return 0;
;
return 0;
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
cat >>confdefs.h <<\_ACEOF
-#define HAVE_SHRINK_CONTROL_STRUCT 1
+#define HAVE_SCHED_SIGNAL_HEADER 1
_ACEOF
+ { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
else
$as_echo "$as_me: failed program was:" >&5
- { $as_echo "$as_me:$LINENO: checking whether struct rw_semaphore member wait_lock is raw" >&5
-$as_echo_n "checking whether struct rw_semaphore member wait_lock is raw... " >&6; }
- tmp_flags="$EXTRA_KCFLAGS"
- EXTRA_KCFLAGS="-Werror"
+ { $as_echo "$as_me:$LINENO: checking whether vfs_getattr() wants 4 args" >&5
+$as_echo_n "checking whether vfs_getattr() wants 4 args... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.c
/* end confdefs.h. */
- #include <linux/rwsem.h>
+ #include <linux/fs.h>
int
main (void)
{
- struct rw_semaphore dummy_semaphore __attribute__ ((unused));
- raw_spinlock_t dummy_lock __attribute__ ((unused)) =
- __RAW_SPIN_LOCK_INITIALIZER(dummy_lock);
- dummy_semaphore.wait_lock = dummy_lock;
+ vfs_getattr((const struct path *)NULL,
+ (struct kstat *)NULL,
+ (u32)0,
+ (unsigned int)0);
;
return 0;
$as_echo "yes" >&6; }
cat >>confdefs.h <<\_ACEOF
-#define RWSEM_SPINLOCK_IS_RAW 1
+#define HAVE_4ARGS_VFS_GETATTR 1
_ACEOF
rm -Rf build
- EXTRA_KCFLAGS="$tmp_flags"
- { $as_echo "$as_me:$LINENO: checking whether struct rw_semaphore has member activity" >&5
-$as_echo_n "checking whether struct rw_semaphore has member activity... " >&6; }
- tmp_flags="$EXTRA_KCFLAGS"
- EXTRA_KCFLAGS="-Werror"
+ { $as_echo "$as_me:$LINENO: checking whether vfs_getattr() wants 3 args" >&5
+$as_echo_n "checking whether vfs_getattr() wants 3 args... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.c
/* end confdefs.h. */
- #include <linux/rwsem.h>
+ #include <linux/fs.h>
int
main (void)
{
- struct rw_semaphore dummy_semaphore __attribute__ ((unused));
- dummy_semaphore.activity = 0;
+ vfs_getattr((struct vfsmount *)NULL,
+ (struct dentry *)NULL,
+ (struct kstat *)NULL);
;
return 0;
$as_echo "yes" >&6; }
cat >>confdefs.h <<\_ACEOF
-#define HAVE_RWSEM_ACTIVITY 1
+#define HAVE_3ARGS_VFS_GETATTR 1
_ACEOF
rm -Rf build
- EXTRA_KCFLAGS="$tmp_flags"
- { $as_echo "$as_me:$LINENO: checking whether struct rw_semaphore has atomic_long_t member count" >&5
-$as_echo_n "checking whether struct rw_semaphore has atomic_long_t member count... " >&6; }
- tmp_flags="$EXTRA_KCFLAGS"
- EXTRA_KCFLAGS="-Werror"
+ { $as_echo "$as_me:$LINENO: checking whether vfs_getattr() wants 2 args" >&5
+$as_echo_n "checking whether vfs_getattr() wants 2 args... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.c
/* end confdefs.h. */
- #include <linux/rwsem.h>
+ #include <linux/fs.h>
int
main (void)
{
- DECLARE_RWSEM(dummy_semaphore);
- (void) atomic_long_read(&dummy_semaphore.count);
+ vfs_getattr((struct path *) NULL,
+ (struct kstat *)NULL);
;
return 0;
$as_echo "yes" >&6; }
cat >>confdefs.h <<\_ACEOF
-#define HAVE_RWSEM_ATOMIC_LONG_COUNT 1
+#define HAVE_2ARGS_VFS_GETATTR 1
_ACEOF
rm -Rf build
- EXTRA_KCFLAGS="$tmp_flags"
- { $as_echo "$as_me:$LINENO: checking whether header linux/sched/rt.h exists" >&5
-$as_echo_n "checking whether header linux/sched/rt.h exists... " >&6; }
+
+ { $as_echo "$as_me:$LINENO: checking whether usleep_range() is available" >&5
+$as_echo_n "checking whether usleep_range() is available... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.c
/* end confdefs.h. */
- #include <linux/sched.h>
- #include <linux/sched/rt.h>
+ #include <linux/delay.h>
int
main (void)
{
- return 0;
+ usleep_range(0, 0);
;
return 0;
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
+ { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
cat >>confdefs.h <<\_ACEOF
-#define HAVE_SCHED_RT_HEADER 1
+#define HAVE_USLEEP_RANGE 1
_ACEOF
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
else
$as_echo "$as_me: failed program was:" >&5
- { $as_echo "$as_me:$LINENO: checking whether header linux/sched/signal.h exists" >&5
-$as_echo_n "checking whether header linux/sched/signal.h exists... " >&6; }
+
+ { $as_echo "$as_me:$LINENO: checking whether struct kmem_cache has allocflags" >&5
+$as_echo_n "checking whether struct kmem_cache has allocflags... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.c
/* end confdefs.h. */
- #include <linux/sched.h>
- #include <linux/sched/signal.h>
+ #include <linux/slab.h>
int
main (void)
{
- return 0;
+ struct kmem_cache cachep __attribute__ ((unused));
+ cachep.allocflags = GFP_KERNEL;
;
return 0;
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
+ { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
cat >>confdefs.h <<\_ACEOF
-#define HAVE_SCHED_SIGNAL_HEADER 1
+#define HAVE_KMEM_CACHE_ALLOCFLAGS 1
_ACEOF
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
else
$as_echo "$as_me: failed program was:" >&5
{ $as_echo "$as_me:$LINENO: result: no" >&5
$as_echo "no" >&6; }
-
-
-fi
-
- rm -Rf build
-
-
-
-
- { $as_echo "$as_me:$LINENO: checking whether vfs_getattr() wants 4 args" >&5
-$as_echo_n "checking whether vfs_getattr() wants 4 args... " >&6; }
+ { $as_echo "$as_me:$LINENO: checking whether struct kmem_cache has gfpflags" >&5
+$as_echo_n "checking whether struct kmem_cache has gfpflags... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.c
/* end confdefs.h. */
- #include <linux/fs.h>
+ #include <linux/slab.h>
int
main (void)
{
- vfs_getattr((const struct path *)NULL,
- (struct kstat *)NULL,
- (u32)0,
- (unsigned int)0);
+ struct kmem_cache cachep __attribute__ ((unused));
+ cachep.gfpflags = GFP_KERNEL;
;
return 0;
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- { $as_echo "$as_me:$LINENO: result: yes" >&5
+ { $as_echo "$as_me:$LINENO: result: yes" >&5
$as_echo "yes" >&6; }
cat >>confdefs.h <<\_ACEOF
-#define HAVE_4ARGS_VFS_GETATTR 1
+#define HAVE_KMEM_CACHE_GFPFLAGS 1
_ACEOF
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- { $as_echo "$as_me:$LINENO: result: no" >&5
+ { $as_echo "$as_me:$LINENO: result: no" >&5
$as_echo "no" >&6; }
- { $as_echo "$as_me:$LINENO: checking whether vfs_getattr() wants 3 args" >&5
-$as_echo_n "checking whether vfs_getattr() wants 3 args... " >&6; }
+
+fi
+
+ rm -Rf build
+
+
+
+
+ { $as_echo "$as_me:$LINENO: checking whether wait_on_bit() takes an action" >&5
+$as_echo_n "checking whether wait_on_bit() takes an action... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.c
/* end confdefs.h. */
- #include <linux/fs.h>
+ #include <linux/wait.h>
int
main (void)
{
- vfs_getattr((struct vfsmount *)NULL,
- (struct dentry *)NULL,
- (struct kstat *)NULL);
+ int (*action)(void *) = NULL;
+ wait_on_bit(NULL, 0, action, 0);
;
return 0;
$as_echo "yes" >&6; }
cat >>confdefs.h <<\_ACEOF
-#define HAVE_3ARGS_VFS_GETATTR 1
+#define HAVE_WAIT_ON_BIT_ACTION 1
_ACEOF
- { $as_echo "$as_me:$LINENO: checking whether vfs_getattr() wants 2 args" >&5
-$as_echo_n "checking whether vfs_getattr() wants 2 args... " >&6; }
+ { $as_echo "$as_me:$LINENO: checking whether inode_lock_shared() exists" >&5
+$as_echo_n "checking whether inode_lock_shared() exists... " >&6; }
+ tmp_flags="$EXTRA_KCFLAGS"
+ EXTRA_KCFLAGS="-Werror"
cat confdefs.h - <<_ACEOF >conftest.c
main (void)
{
- vfs_getattr((struct path *) NULL,
- (struct kstat *)NULL);
+ struct inode *inode = NULL;
+ inode_lock_shared(inode);
;
return 0;
$as_echo "yes" >&6; }
cat >>confdefs.h <<\_ACEOF
-#define HAVE_2ARGS_VFS_GETATTR 1
+#define HAVE_INODE_LOCK_SHARED 1
_ACEOF
rm -Rf build
+ EXTRA_KCFLAGS="$tmp_flags"
+
+
+ { $as_echo "$as_me:$LINENO: checking whether group_info->gid exists" >&5
+$as_echo_n "checking whether group_info->gid exists... " >&6; }
+ tmp_flags="$EXTRA_KCFLAGS"
+ EXTRA_KCFLAGS="-Werror"
- { $as_echo "$as_me:$LINENO: checking whether usleep_range() is available" >&5
-$as_echo_n "checking whether usleep_range() is available... " >&6; }
-
-
cat confdefs.h - <<_ACEOF >conftest.c
/* confdefs.h. */
_ACEOF
/* end confdefs.h. */
- #include <linux/delay.h>
+ #include <linux/cred.h>
int
main (void)
{
- usleep_range(0, 0);
+ struct group_info *gi = groups_alloc(1);
+ gi->gid[0] = KGIDT_INIT(0);
;
return 0;
$as_echo "yes" >&6; }
cat >>confdefs.h <<\_ACEOF
-#define HAVE_USLEEP_RANGE 1
+#define HAVE_GROUP_INFO_GID 1
_ACEOF
rm -Rf build
+ EXTRA_KCFLAGS="$tmp_flags"
- { $as_echo "$as_me:$LINENO: checking whether struct kmem_cache has allocflags" >&5
-$as_echo_n "checking whether struct kmem_cache has allocflags... " >&6; }
+ { $as_echo "$as_me:$LINENO: checking whether kmem_cache_create_usercopy() exists" >&5
+$as_echo_n "checking whether kmem_cache_create_usercopy() exists... " >&6; }
+ tmp_flags="$EXTRA_KCFLAGS"
+ EXTRA_KCFLAGS="-Werror"
cat confdefs.h - <<_ACEOF >conftest.c
#include <linux/slab.h>
+ static void ctor(void *foo)
+ {
+ // fake ctor
+ }
int
main (void)
{
- struct kmem_cache cachep __attribute__ ((unused));
- cachep.allocflags = GFP_KERNEL;
+ struct kmem_cache *skc_linux_cache;
+ const char *name = "test";
+ size_t size = 4096;
+ size_t align = 8;
+ unsigned long flags = 0;
+ size_t useroffset = 0;
+ size_t usersize = size - useroffset;
+
+ skc_linux_cache = kmem_cache_create_usercopy(
+ name, size, align, flags, useroffset, usersize, ctor);
;
return 0;
$as_echo "yes" >&6; }
cat >>confdefs.h <<\_ACEOF
-#define HAVE_KMEM_CACHE_ALLOCFLAGS 1
+#define HAVE_KMEM_CACHE_CREATE_USERCOPY 1
_ACEOF
{ $as_echo "$as_me:$LINENO: result: no" >&5
$as_echo "no" >&6; }
- { $as_echo "$as_me:$LINENO: checking whether struct kmem_cache has gfpflags" >&5
-$as_echo_n "checking whether struct kmem_cache has gfpflags... " >&6; }
+
+
+fi
+
+ rm -Rf build
+
+
+ EXTRA_KCFLAGS="$tmp_flags"
+
+
+ { $as_echo "$as_me:$LINENO: checking whether wait_queue_entry_t exists" >&5
+$as_echo_n "checking whether wait_queue_entry_t exists... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.c
/* end confdefs.h. */
- #include <linux/slab.h>
+ #include <linux/wait.h>
int
main (void)
{
- struct kmem_cache cachep __attribute__ ((unused));
- cachep.gfpflags = GFP_KERNEL;
+ wait_queue_entry_t *entry __attribute__ ((unused));
;
return 0;
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- { $as_echo "$as_me:$LINENO: result: yes" >&5
+ { $as_echo "$as_me:$LINENO: result: yes" >&5
$as_echo "yes" >&6; }
cat >>confdefs.h <<\_ACEOF
-#define HAVE_KMEM_CACHE_GFPFLAGS 1
+#define HAVE_WAIT_QUEUE_ENTRY_T 1
_ACEOF
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- { $as_echo "$as_me:$LINENO: result: no" >&5
+ { $as_echo "$as_me:$LINENO: result: no" >&5
$as_echo "no" >&6; }
-
-fi
-
- rm -Rf build
-
-
-
-
- { $as_echo "$as_me:$LINENO: checking whether wait_on_bit() takes an action" >&5
-$as_echo_n "checking whether wait_on_bit() takes an action... " >&6; }
+ { $as_echo "$as_me:$LINENO: checking whether wq_head->head and wq_entry->entry exist" >&5
+$as_echo_n "checking whether wq_head->head and wq_entry->entry exist... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.c
#include <linux/wait.h>
+ #ifdef HAVE_WAIT_QUEUE_ENTRY_T
+ typedef wait_queue_head_t spl_wait_queue_head_t;
+ typedef wait_queue_entry_t spl_wait_queue_entry_t;
+ #else
+ typedef wait_queue_head_t spl_wait_queue_head_t;
+ typedef wait_queue_t spl_wait_queue_entry_t;
+ #endif
+
int
main (void)
{
- int (*action)(void *) = NULL;
- wait_on_bit(NULL, 0, action, 0);
+ spl_wait_queue_head_t wq_head;
+ spl_wait_queue_entry_t wq_entry;
+ struct list_head *head __attribute__ ((unused));
+ struct list_head *entry __attribute__ ((unused));
+
+ head = &wq_head.head;
+ entry = &wq_entry.entry;
;
return 0;
$as_echo "yes" >&6; }
cat >>confdefs.h <<\_ACEOF
-#define HAVE_WAIT_ON_BIT_ACTION 1
+#define HAVE_WAIT_QUEUE_HEAD_ENTRY 1
_ACEOF
- { $as_echo "$as_me:$LINENO: checking whether inode_lock_shared() exists" >&5
-$as_echo_n "checking whether inode_lock_shared() exists... " >&6; }
- tmp_flags="$EXTRA_KCFLAGS"
- EXTRA_KCFLAGS="-Werror"
+ { $as_echo "$as_me:$LINENO: checking whether io_schedule_timeout() is available" >&5
+$as_echo_n "checking whether io_schedule_timeout() is available... " >&6; }
+
cat confdefs.h - <<_ACEOF >conftest.c
/* end confdefs.h. */
- #include <linux/fs.h>
+ #include <linux/sched.h>
int
main (void)
{
- struct inode *inode = NULL;
- inode_lock_shared(inode);
+ (void) io_schedule_timeout(1);
;
return 0;
ac_status=$?
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
+ rc=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+ rc=1
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_INODE_LOCK_SHARED 1
-_ACEOF
+fi
+ rm -Rf build
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+
+ if test $rc -ne 0; then :
+
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+
+ else
+ if test "x$enable_linux_builtin" != xyes; then
+
+ grep -q -E '[[:space:]]io_schedule_timeout[[:space:]]' \
+ $LINUX_OBJ/Module*.symvers 2>/dev/null
+ rc=$?
+ if test $rc -ne 0; then
+ export=0
+ for file in ; do
+ grep -q -E "EXPORT_SYMBOL.*(io_schedule_timeout)" \
+ "$LINUX_OBJ/$file" 2>/dev/null
+ rc=$?
+ if test $rc -eq 0; then
+ export=1
+ break;
+ fi
+ done
+ if test $export -eq 0; then :
+ rc=1
+ else :
+ rc=0
+ fi
+ else :
+ rc=0
+ fi
+
+ fi
+ if test $rc -ne 0; then :
{ $as_echo "$as_me:$LINENO: result: no" >&5
$as_echo "no" >&6; }
+ else :
+ { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
-fi
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_IO_SCHEDULE_TIMEOUT 1
+_ACEOF
- rm -Rf build
+ fi
+ fi
- EXTRA_KCFLAGS="$tmp_flags"
- { $as_echo "$as_me:$LINENO: checking whether group_info->gid exists" >&5
-$as_echo_n "checking whether group_info->gid exists... " >&6; }
+ { $as_echo "$as_me:$LINENO: checking whether kernel_write() takes loff_t pointer" >&5
+$as_echo_n "checking whether kernel_write() takes loff_t pointer... " >&6; }
tmp_flags="$EXTRA_KCFLAGS"
EXTRA_KCFLAGS="-Werror"
/* end confdefs.h. */
- #include <linux/cred.h>
+ #include <linux/fs.h>
int
main (void)
{
- struct group_info *gi = groups_alloc(1);
- gi->gid[0] = KGIDT_INIT(0);
+ struct file *file = NULL;
+ const void *buf = NULL;
+ size_t count = 0;
+ loff_t *pos = NULL;
+ ssize_t ret;
+
+ ret = kernel_write(file, buf, count, pos);
;
return 0;
$as_echo "yes" >&6; }
cat >>confdefs.h <<\_ACEOF
-#define HAVE_GROUP_INFO_GID 1
+#define HAVE_KERNEL_WRITE_PPOS 1
_ACEOF
EXTRA_KCFLAGS="$tmp_flags"
- { $as_echo "$as_me:$LINENO: checking whether kmem_cache_create_usercopy() exists" >&5
-$as_echo_n "checking whether kmem_cache_create_usercopy() exists... " >&6; }
+ { $as_echo "$as_me:$LINENO: checking whether kernel_read() takes loff_t pointer" >&5
+$as_echo_n "checking whether kernel_read() takes loff_t pointer... " >&6; }
tmp_flags="$EXTRA_KCFLAGS"
EXTRA_KCFLAGS="-Werror"
/* end confdefs.h. */
- #include <linux/slab.h>
- static void ctor(void *foo)
- {
- // fake ctor
- }
+ #include <linux/fs.h>
int
main (void)
{
- struct kmem_cache *skc_linux_cache;
- const char *name = "test";
- size_t size = 4096;
- size_t align = 8;
- unsigned long flags = 0;
- size_t useroffset = 0;
- size_t usersize = size - useroffset;
+ struct file *file = NULL;
+ void *buf = NULL;
+ size_t count = 0;
+ loff_t *pos = NULL;
+ ssize_t ret;
- skc_linux_cache = kmem_cache_create_usercopy(
- name, size, align, flags, useroffset, usersize, ctor);
+ ret = kernel_read(file, buf, count, pos);
;
return 0;
$as_echo "yes" >&6; }
cat >>confdefs.h <<\_ACEOF
-#define HAVE_KMEM_CACHE_CREATE_USERCOPY 1
+#define HAVE_KERNEL_READ_PPOS 1
_ACEOF
EXTRA_KCFLAGS="$tmp_flags"
- { $as_echo "$as_me:$LINENO: checking whether wait_queue_entry_t exists" >&5
-$as_echo_n "checking whether wait_queue_entry_t exists... " >&6; }
+ { $as_echo "$as_me:$LINENO: checking whether timer_list.function gets a timer_list" >&5
+$as_echo_n "checking whether timer_list.function gets a timer_list... " >&6; }
+ tmp_flags="$EXTRA_KCFLAGS"
+ EXTRA_KCFLAGS="-Werror"
cat confdefs.h - <<_ACEOF >conftest.c
/* end confdefs.h. */
- #include <linux/wait.h>
+ #include <linux/timer.h>
+ void task_expire(struct timer_list *tl) {}
int
main (void)
{
- wait_queue_entry_t *entry __attribute__ ((unused));
+ #ifndef from_timer
+ #error "No from_timer() macro"
+ #endif
+
+ struct timer_list timer;
+ timer.function = task_expire;
+ timer_setup(&timer, NULL, 0);
;
return 0;
$as_echo "yes" >&6; }
cat >>confdefs.h <<\_ACEOF
-#define HAVE_WAIT_QUEUE_ENTRY_T 1
+#define HAVE_KERNEL_TIMER_FUNCTION_TIMER_LIST 1
_ACEOF
rm -Rf build
+ EXTRA_KCFLAGS="$tmp_flags"
-
- { $as_echo "$as_me:$LINENO: checking whether wq_head->head and wq_entry->entry exist" >&5
-$as_echo_n "checking whether wq_head->head and wq_entry->entry exist... " >&6; }
+ ;;
+ user) ;;
+ all)
-cat confdefs.h - <<_ACEOF >conftest.c
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
+# Check whether --with-linux was given.
+if test "${with_linux+set}" = set; then
+ withval=$with_linux; kernelsrc="$withval"
+fi
- #include <linux/wait.h>
-
- #ifdef HAVE_WAIT_QUEUE_ENTRY_T
- typedef wait_queue_head_t spl_wait_queue_head_t;
- typedef wait_queue_entry_t spl_wait_queue_entry_t;
- #else
- typedef wait_queue_head_t spl_wait_queue_head_t;
- typedef wait_queue_t spl_wait_queue_entry_t;
- #endif
-
-int
-main (void)
-{
-
- spl_wait_queue_head_t wq_head;
- spl_wait_queue_entry_t wq_entry;
- struct list_head *head __attribute__ ((unused));
- struct list_head *entry __attribute__ ((unused));
-
- head = &wq_head.head;
- entry = &wq_entry.entry;
-
- ;
- return 0;
-}
-
-_ACEOF
-
-
- rm -Rf build && mkdir -p build && touch build/conftest.mod.c
- echo "obj-m := conftest.o" >build/Makefile
- modpost_flag=''
- test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage
- if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } >/dev/null && { ac_try='test -s build/conftest.o'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
-
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_WAIT_QUEUE_HEAD_ENTRY 1
-_ACEOF
-
-
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-
-
-
-fi
-
- rm -Rf build
-
-
-
-
- { $as_echo "$as_me:$LINENO: checking whether kernel_write() takes loff_t pointer" >&5
-$as_echo_n "checking whether kernel_write() takes loff_t pointer... " >&6; }
- tmp_flags="$EXTRA_KCFLAGS"
- EXTRA_KCFLAGS="-Werror"
-
-
-cat confdefs.h - <<_ACEOF >conftest.c
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
- #include <linux/fs.h>
-
-int
-main (void)
-{
-
- struct file *file = NULL;
- const void *buf = NULL;
- size_t count = 0;
- loff_t *pos = NULL;
- ssize_t ret;
-
- ret = kernel_write(file, buf, count, pos);
-
- ;
- return 0;
-}
-
-_ACEOF
-
-
- rm -Rf build && mkdir -p build && touch build/conftest.mod.c
- echo "obj-m := conftest.o" >build/Makefile
- modpost_flag=''
- test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage
- if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } >/dev/null && { ac_try='test -s build/conftest.o'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
-
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_KERNEL_WRITE_PPOS 1
-_ACEOF
-
-
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-
-
-
-fi
-
- rm -Rf build
-
-
- EXTRA_KCFLAGS="$tmp_flags"
-
-
- { $as_echo "$as_me:$LINENO: checking whether kernel_read() takes loff_t pointer" >&5
-$as_echo_n "checking whether kernel_read() takes loff_t pointer... " >&6; }
- tmp_flags="$EXTRA_KCFLAGS"
- EXTRA_KCFLAGS="-Werror"
-
-
-cat confdefs.h - <<_ACEOF >conftest.c
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
- #include <linux/fs.h>
-
-int
-main (void)
-{
-
- struct file *file = NULL;
- void *buf = NULL;
- size_t count = 0;
- loff_t *pos = NULL;
- ssize_t ret;
-
- ret = kernel_read(file, buf, count, pos);
-
- ;
- return 0;
-}
-
-_ACEOF
-
-
- rm -Rf build && mkdir -p build && touch build/conftest.mod.c
- echo "obj-m := conftest.o" >build/Makefile
- modpost_flag=''
- test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage
- if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } >/dev/null && { ac_try='test -s build/conftest.o'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
-
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_KERNEL_READ_PPOS 1
-_ACEOF
-
-
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-
-
-
-fi
-
- rm -Rf build
-
-
- EXTRA_KCFLAGS="$tmp_flags"
-
-
- { $as_echo "$as_me:$LINENO: checking whether timer_list.function gets a timer_list" >&5
-$as_echo_n "checking whether timer_list.function gets a timer_list... " >&6; }
- tmp_flags="$EXTRA_KCFLAGS"
- EXTRA_KCFLAGS="-Werror"
-
-
-cat confdefs.h - <<_ACEOF >conftest.c
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
- #include <linux/timer.h>
- void task_expire(struct timer_list *tl) {}
-
-int
-main (void)
-{
-
- #ifndef from_timer
- #error "No from_timer() macro"
- #endif
-
- struct timer_list timer;
- timer.function = task_expire;
- timer_setup(&timer, NULL, 0);
-
- ;
- return 0;
-}
-
-_ACEOF
-
-
- rm -Rf build && mkdir -p build && touch build/conftest.mod.c
- echo "obj-m := conftest.o" >build/Makefile
- modpost_flag=''
- test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage
- if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } >/dev/null && { ac_try='test -s build/conftest.o'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
-
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_KERNEL_TIMER_FUNCTION_TIMER_LIST 1
-_ACEOF
-
-
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-
-
-
-fi
-
- rm -Rf build
-
-
- EXTRA_KCFLAGS="$tmp_flags"
-
- ;;
- user) ;;
- all)
-
-
-# Check whether --with-linux was given.
-if test "${with_linux+set}" = set; then
- withval=$with_linux; kernelsrc="$withval"
-fi
-
-
-
-# Check whether --with-linux-obj was given.
-if test "${with_linux_obj+set}" = set; then
- withval=$with_linux_obj; kernelbuild="$withval"
-fi
-
-
- { $as_echo "$as_me:$LINENO: checking kernel source directory" >&5
-$as_echo_n "checking kernel source directory... " >&6; }
- if test -z "$kernelsrc"; then
- if test -e "/lib/modules/$(uname -r)/source"; then
- headersdir="/lib/modules/$(uname -r)/source"
- sourcelink=$(readlink -f "$headersdir")
- elif test -e "/lib/modules/$(uname -r)/build"; then
- headersdir="/lib/modules/$(uname -r)/build"
- sourcelink=$(readlink -f "$headersdir")
- else
- sourcelink=$(ls -1d /usr/src/kernels/* \
- /usr/src/linux-* \
- 2>/dev/null | grep -v obj | tail -1)
- fi
-
- if test -n "$sourcelink" && test -e ${sourcelink}; then
- kernelsrc=`readlink -f ${sourcelink}`
- else
- kernelsrc="Not found"
- fi
- else
- if test "$kernelsrc" = "NONE"; then
- kernsrcver=NONE
- fi
- withlinux=yes
- fi
-
- { $as_echo "$as_me:$LINENO: result: $kernelsrc" >&5
-$as_echo "$kernelsrc" >&6; }
- if test ! -d "$kernelsrc"; then
- { { $as_echo "$as_me:$LINENO: error:
- *** Please make sure the kernel devel package for your distribution
- *** is installed and then try again. If that fails, you can specify the
- *** location of the kernel source with the '--with-linux=PATH' option." >&5
-$as_echo "$as_me: error:
- *** Please make sure the kernel devel package for your distribution
- *** is installed and then try again. If that fails, you can specify the
- *** location of the kernel source with the '--with-linux=PATH' option." >&2;}
- { (exit 1); exit 1; }; }
- fi
-
- { $as_echo "$as_me:$LINENO: checking kernel build directory" >&5
-$as_echo_n "checking kernel build directory... " >&6; }
- if test -z "$kernelbuild"; then
- if test x$withlinux != xyes -a -e "/lib/modules/$(uname -r)/build"; then
- kernelbuild=`readlink -f /lib/modules/$(uname -r)/build`
- elif test -d ${kernelsrc}-obj/${target_cpu}/${target_cpu}; then
- kernelbuild=${kernelsrc}-obj/${target_cpu}/${target_cpu}
- elif test -d ${kernelsrc}-obj/${target_cpu}/default; then
- kernelbuild=${kernelsrc}-obj/${target_cpu}/default
- elif test -d `dirname ${kernelsrc}`/build-${target_cpu}; then
- kernelbuild=`dirname ${kernelsrc}`/build-${target_cpu}
- else
- kernelbuild=${kernelsrc}
- fi
- fi
- { $as_echo "$as_me:$LINENO: result: $kernelbuild" >&5
-$as_echo "$kernelbuild" >&6; }
-
- { $as_echo "$as_me:$LINENO: checking kernel source version" >&5
-$as_echo_n "checking kernel source version... " >&6; }
- utsrelease1=$kernelbuild/include/linux/version.h
- utsrelease2=$kernelbuild/include/linux/utsrelease.h
- utsrelease3=$kernelbuild/include/generated/utsrelease.h
- if test -r $utsrelease1 && fgrep -q UTS_RELEASE $utsrelease1; then
- utsrelease=linux/version.h
- elif test -r $utsrelease2 && fgrep -q UTS_RELEASE $utsrelease2; then
- utsrelease=linux/utsrelease.h
- elif test -r $utsrelease3 && fgrep -q UTS_RELEASE $utsrelease3; then
- utsrelease=generated/utsrelease.h
- fi
-
- if test "$utsrelease"; then
- kernsrcver=`(echo "#include <$utsrelease>";
- echo "kernsrcver=UTS_RELEASE") |
- cpp -I $kernelbuild/include |
- grep "^kernsrcver=" | cut -d \" -f 2`
-
- if test -z "$kernsrcver"; then
- { $as_echo "$as_me:$LINENO: result: Not found" >&5
-$as_echo "Not found" >&6; }
- { { $as_echo "$as_me:$LINENO: error: *** Cannot determine kernel version." >&5
-$as_echo "$as_me: error: *** Cannot determine kernel version." >&2;}
- { (exit 1); exit 1; }; }
- fi
- else
- { $as_echo "$as_me:$LINENO: result: Not found" >&5
-$as_echo "Not found" >&6; }
- if test "x$enable_linux_builtin" != xyes; then
- { { $as_echo "$as_me:$LINENO: error: *** Cannot find UTS_RELEASE definition." >&5
-$as_echo "$as_me: error: *** Cannot find UTS_RELEASE definition." >&2;}
- { (exit 1); exit 1; }; }
- else
- { { $as_echo "$as_me:$LINENO: error:
- *** Cannot find UTS_RELEASE definition.
- *** Please run 'make prepare' inside the kernel source tree." >&5
-$as_echo "$as_me: error:
- *** Cannot find UTS_RELEASE definition.
- *** Please run 'make prepare' inside the kernel source tree." >&2;}
- { (exit 1); exit 1; }; }
- fi
- fi
-
- { $as_echo "$as_me:$LINENO: result: $kernsrcver" >&5
-$as_echo "$kernsrcver" >&6; }
-
- LINUX=${kernelsrc}
- LINUX_OBJ=${kernelbuild}
- LINUX_VERSION=${kernsrcver}
-
-
-
-
-
-
- modpost=$LINUX/scripts/Makefile.modpost
- { $as_echo "$as_me:$LINENO: checking kernel file name for module symbols" >&5
-$as_echo_n "checking kernel file name for module symbols... " >&6; }
- if test "x$enable_linux_builtin" != xyes -a -f "$modpost"; then
- if grep -q Modules.symvers $modpost; then
- LINUX_SYMBOLS=Modules.symvers
- else
- LINUX_SYMBOLS=Module.symvers
- fi
-
- if ! test -f "$LINUX_OBJ/$LINUX_SYMBOLS"; then
- { { $as_echo "$as_me:$LINENO: error:
- *** Please make sure the kernel devel package for your distribution
- *** is installed. If you are building with a custom kernel, make sure the
- *** kernel is configured, built, and the '--with-linux=PATH' configure
- *** option refers to the location of the kernel source." >&5
-$as_echo "$as_me: error:
- *** Please make sure the kernel devel package for your distribution
- *** is installed. If you are building with a custom kernel, make sure the
- *** kernel is configured, built, and the '--with-linux=PATH' configure
- *** option refers to the location of the kernel source." >&2;}
- { (exit 1); exit 1; }; }
- fi
- else
- LINUX_SYMBOLS=NONE
- fi
- { $as_echo "$as_me:$LINENO: result: $LINUX_SYMBOLS" >&5
-$as_echo "$LINUX_SYMBOLS" >&6; }
-
-
-
-
- if test "${LINUX_OBJ}" != "${LINUX}"; then
- KERNELMAKE_PARAMS="$KERNELMAKE_PARAMS O=$LINUX_OBJ"
- fi
-
-
- KERNELCPPFLAGS="$KERNELCPPFLAGS -Wstrict-prototypes"
-
-
-
- { $as_echo "$as_me:$LINENO: checking whether debugging is enabled" >&5
-$as_echo_n "checking whether debugging is enabled... " >&6; }
- # Check whether --enable-debug was given.
-if test "${enable_debug+set}" = set; then
- enableval=$enable_debug;
-else
- enable_debug=no
-fi
-
-
- if test "x$enable_debug" = xyes; then
-
- KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG -Werror"
- DEBUG_CFLAGS="-DDEBUG -Werror"
- DEBUG_SPL="_with_debug"
-
-else
-
- KERNELCPPFLAGS="${KERNELCPPFLAGS} -DNDEBUG"
- DEBUG_CFLAGS="-DNDEBUG"
- DEBUG_SPL="_without_debug"
-
-fi
-
-
-
-
- { $as_echo "$as_me:$LINENO: result: $enable_debug" >&5
-$as_echo "$enable_debug" >&6; }
-
-
- # Check whether --enable-debug-kmem was given.
-if test "${enable_debug_kmem+set}" = set; then
- enableval=$enable_debug_kmem;
-else
- enable_debug_kmem=no
-fi
-
-
- if test "x$enable_debug_kmem" = xyes; then
-
- KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG_KMEM"
- DEBUG_KMEM="_with_debug_kmem"
-
-cat >>confdefs.h <<\_ACEOF
-#define DEBUG_KMEM 1
-_ACEOF
-
-
-else
-
- DEBUG_KMEM="_without_debug_kmem"
-
-fi
-
-
-
- { $as_echo "$as_me:$LINENO: checking whether basic kmem accounting is enabled" >&5
-$as_echo_n "checking whether basic kmem accounting is enabled... " >&6; }
- { $as_echo "$as_me:$LINENO: result: $enable_debug_kmem" >&5
-$as_echo "$enable_debug_kmem" >&6; }
-
-
- # Check whether --enable-debug-kmem-tracking was given.
-if test "${enable_debug_kmem_tracking+set}" = set; then
- enableval=$enable_debug_kmem_tracking;
-else
- enable_debug_kmem_tracking=no
-fi
-
-
- if test "x$enable_debug_kmem_tracking" = xyes; then
-
- KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG_KMEM_TRACKING"
- DEBUG_KMEM_TRACKING="_with_debug_kmem_tracking"
-
-cat >>confdefs.h <<\_ACEOF
-#define DEBUG_KMEM_TRACKING 1
-_ACEOF
-
-
-else
-
- DEBUG_KMEM_TRACKING="_without_debug_kmem_tracking"
-
-fi
-
-
-
- { $as_echo "$as_me:$LINENO: checking whether detailed kmem tracking is enabled" >&5
-$as_echo_n "checking whether detailed kmem tracking is enabled... " >&6; }
- { $as_echo "$as_me:$LINENO: result: $enable_debug_kmem_tracking" >&5
-$as_echo "$enable_debug_kmem_tracking" >&6; }
-
- { $as_echo "$as_me:$LINENO: checking whether modules can be built" >&5
-$as_echo_n "checking whether modules can be built... " >&6; }
-
-
-cat confdefs.h - <<_ACEOF >conftest.c
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-int
-main (void)
-{
-
- ;
- return 0;
-}
-
-_ACEOF
-
-
- rm -Rf build && mkdir -p build && touch build/conftest.mod.c
- echo "obj-m := conftest.o" >build/Makefile
- modpost_flag=''
- test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage
- if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } >/dev/null && { ac_try='test -s build/conftest.o'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
-
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
-
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
- if test "x$enable_linux_builtin" != xyes; then
- { { $as_echo "$as_me:$LINENO: error: *** Unable to build an empty module." >&5
-$as_echo "$as_me: error: *** Unable to build an empty module." >&2;}
- { (exit 1); exit 1; }; }
- else
- { { $as_echo "$as_me:$LINENO: error:
- *** Unable to build an empty module.
- *** Please run 'make scripts' inside the kernel source tree." >&5
-$as_echo "$as_me: error:
- *** Unable to build an empty module.
- *** Please run 'make scripts' inside the kernel source tree." >&2;}
- { (exit 1); exit 1; }; }
- fi
-
-
-
-fi
-
- rm -Rf build
-
-
-
- if test "x$cross_compiling" != xyes; then
-
- if test "$cross_compiling" = yes; then
- { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }; }
-else
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
- #include "$LINUX/include/linux/license.h"
-
-int
-main ()
-{
-
- return !license_is_gpl_compatible(
- "$SPL_META_LICENSE");
-
- ;
- return 0;
-}
-
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
-
-
-cat >>confdefs.h <<\_ACEOF
-#define SPL_IS_GPL_COMPATIBLE 1
-_ACEOF
-
-
-else
- $as_echo "$as_me: program exited with status $ac_status" >&5
-$as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-
-
-fi
-rm -rf conftest.dSYM
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-
-
-
-fi
-
-
-
- # Check whether --enable-atomic-spinlocks was given.
-if test "${enable_atomic_spinlocks+set}" = set; then
- enableval=$enable_atomic_spinlocks;
-else
- enable_atomic_spinlocks=check
-fi
+# Check whether --with-linux-obj was given.
+if test "${with_linux_obj+set}" = set; then
+ withval=$with_linux_obj; kernelbuild="$withval"
+fi
+ { $as_echo "$as_me:$LINENO: checking kernel source directory" >&5
+$as_echo_n "checking kernel source directory... " >&6; }
+ if test -z "$kernelsrc"; then
+ if test -e "/lib/modules/$(uname -r)/source"; then
+ headersdir="/lib/modules/$(uname -r)/source"
+ sourcelink=$(readlink -f "$headersdir")
+ elif test -e "/lib/modules/$(uname -r)/build"; then
+ headersdir="/lib/modules/$(uname -r)/build"
+ sourcelink=$(readlink -f "$headersdir")
+ else
+ sourcelink=$(ls -1d /usr/src/kernels/* \
+ /usr/src/linux-* \
+ 2>/dev/null | grep -v obj | tail -1)
+ fi
-cat confdefs.h - <<_ACEOF >conftest.c
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
+ if test -n "$sourcelink" && test -e ${sourcelink}; then
+ kernelsrc=`readlink -f ${sourcelink}`
+ else
+ kernelsrc="Not found"
+ fi
+ else
+ if test "$kernelsrc" = "NONE"; then
+ kernsrcver=NONE
+ fi
+ withlinux=yes
+ fi
+ { $as_echo "$as_me:$LINENO: result: $kernelsrc" >&5
+$as_echo "$kernelsrc" >&6; }
+ if test ! -d "$kernelsrc"; then
+ { { $as_echo "$as_me:$LINENO: error:
+ *** Please make sure the kernel devel package for your distribution
+ *** is installed and then try again. If that fails, you can specify the
+ *** location of the kernel source with the '--with-linux=PATH' option." >&5
+$as_echo "$as_me: error:
+ *** Please make sure the kernel devel package for your distribution
+ *** is installed and then try again. If that fails, you can specify the
+ *** location of the kernel source with the '--with-linux=PATH' option." >&2;}
+ { (exit 1); exit 1; }; }
+ fi
- #include <linux/fs.h>
+ { $as_echo "$as_me:$LINENO: checking kernel build directory" >&5
+$as_echo_n "checking kernel build directory... " >&6; }
+ if test -z "$kernelbuild"; then
+ if test x$withlinux != xyes -a -e "/lib/modules/$(uname -r)/build"; then
+ kernelbuild=`readlink -f /lib/modules/$(uname -r)/build`
+ elif test -d ${kernelsrc}-obj/${target_cpu}/${target_cpu}; then
+ kernelbuild=${kernelsrc}-obj/${target_cpu}/${target_cpu}
+ elif test -d ${kernelsrc}-obj/${target_cpu}/default; then
+ kernelbuild=${kernelsrc}-obj/${target_cpu}/default
+ elif test -d `dirname ${kernelsrc}`/build-${target_cpu}; then
+ kernelbuild=`dirname ${kernelsrc}`/build-${target_cpu}
+ else
+ kernelbuild=${kernelsrc}
+ fi
+ fi
+ { $as_echo "$as_me:$LINENO: result: $kernelbuild" >&5
+$as_echo "$kernelbuild" >&6; }
-int
-main (void)
-{
+ { $as_echo "$as_me:$LINENO: checking kernel source version" >&5
+$as_echo_n "checking kernel source version... " >&6; }
+ utsrelease1=$kernelbuild/include/linux/version.h
+ utsrelease2=$kernelbuild/include/linux/utsrelease.h
+ utsrelease3=$kernelbuild/include/generated/utsrelease.h
+ if test -r $utsrelease1 && fgrep -q UTS_RELEASE $utsrelease1; then
+ utsrelease=linux/version.h
+ elif test -r $utsrelease2 && fgrep -q UTS_RELEASE $utsrelease2; then
+ utsrelease=linux/utsrelease.h
+ elif test -r $utsrelease3 && fgrep -q UTS_RELEASE $utsrelease3; then
+ utsrelease=generated/utsrelease.h
+ fi
- atomic64_t *ptr __attribute__ ((unused));
+ if test "$utsrelease"; then
+ kernsrcver=`(echo "#include <$utsrelease>";
+ echo "kernsrcver=UTS_RELEASE") |
+ cpp -I $kernelbuild/include |
+ grep "^kernsrcver=" | cut -d \" -f 2`
- ;
- return 0;
-}
+ if test -z "$kernsrcver"; then
+ { $as_echo "$as_me:$LINENO: result: Not found" >&5
+$as_echo "Not found" >&6; }
+ { { $as_echo "$as_me:$LINENO: error: *** Cannot determine kernel version." >&5
+$as_echo "$as_me: error: *** Cannot determine kernel version." >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+ else
+ { $as_echo "$as_me:$LINENO: result: Not found" >&5
+$as_echo "Not found" >&6; }
+ if test "x$enable_linux_builtin" != xyes; then
+ { { $as_echo "$as_me:$LINENO: error: *** Cannot find UTS_RELEASE definition." >&5
+$as_echo "$as_me: error: *** Cannot find UTS_RELEASE definition." >&2;}
+ { (exit 1); exit 1; }; }
+ else
+ { { $as_echo "$as_me:$LINENO: error:
+ *** Cannot find UTS_RELEASE definition.
+ *** Please run 'make prepare' inside the kernel source tree." >&5
+$as_echo "$as_me: error:
+ *** Cannot find UTS_RELEASE definition.
+ *** Please run 'make prepare' inside the kernel source tree." >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+ fi
-_ACEOF
+ { $as_echo "$as_me:$LINENO: result: $kernsrcver" >&5
+$as_echo "$kernsrcver" >&6; }
+ LINUX=${kernelsrc}
+ LINUX_OBJ=${kernelbuild}
+ LINUX_VERSION=${kernsrcver}
- rm -Rf build && mkdir -p build && touch build/conftest.mod.c
- echo "obj-m := conftest.o" >build/Makefile
- modpost_flag=''
- test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage
- if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } >/dev/null && { ac_try='test -s build/conftest.o'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- have_atomic64_t=yes
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_ATOMIC64_T 1
-_ACEOF
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
- have_atomic64_t=no
+ modpost=$LINUX/scripts/Makefile.modpost
+ { $as_echo "$as_me:$LINENO: checking kernel file name for module symbols" >&5
+$as_echo_n "checking kernel file name for module symbols... " >&6; }
+ if test "x$enable_linux_builtin" != xyes -a -f "$modpost"; then
+ if grep -q Modules.symvers $modpost; then
+ LINUX_SYMBOLS=Modules.symvers
+ else
+ LINUX_SYMBOLS=Module.symvers
+ fi
+ if ! test -f "$LINUX_OBJ/$LINUX_SYMBOLS"; then
+ { { $as_echo "$as_me:$LINENO: error:
+ *** Please make sure the kernel devel package for your distribution
+ *** is installed. If you are building with a custom kernel, make sure the
+ *** kernel is configured, built, and the '--with-linux=PATH' configure
+ *** option refers to the location of the kernel source." >&5
+$as_echo "$as_me: error:
+ *** Please make sure the kernel devel package for your distribution
+ *** is installed. If you are building with a custom kernel, make sure the
+ *** kernel is configured, built, and the '--with-linux=PATH' configure
+ *** option refers to the location of the kernel source." >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+ else
+ LINUX_SYMBOLS=NONE
+ fi
+ { $as_echo "$as_me:$LINENO: result: $LINUX_SYMBOLS" >&5
+$as_echo "$LINUX_SYMBOLS" >&6; }
-fi
- rm -Rf build
+ if test "${LINUX_OBJ}" != "${LINUX}"; then
+ KERNELMAKE_PARAMS="$KERNELMAKE_PARAMS O=$LINUX_OBJ"
+ fi
- if test "x$enable_atomic_spinlocks" = xcheck; then
+ KERNELCPPFLAGS="$KERNELCPPFLAGS -Wstrict-prototypes"
- if test "x$have_atomic64_t" = xyes; then
- enable_atomic_spinlocks=no
+ { $as_echo "$as_me:$LINENO: checking whether debugging is enabled" >&5
+$as_echo_n "checking whether debugging is enabled... " >&6; }
+ # Check whether --enable-debug was given.
+if test "${enable_debug+set}" = set; then
+ enableval=$enable_debug;
else
-
- enable_atomic_spinlocks=yes
-
-fi
-
-
+ enable_debug=no
fi
- if test "x$enable_atomic_spinlocks" = xyes; then
-
-
-cat >>confdefs.h <<\_ACEOF
-#define ATOMIC_SPINLOCK 1
-_ACEOF
+ if test "x$enable_debug" = xyes; then
+ KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG -Werror"
+ DEBUG_CFLAGS="-DDEBUG -Werror"
+ DEBUG_SPL="_with_debug"
else
- if test "x$have_atomic64_t" = xno; then
-
- { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ { $as_echo "$as_me:$LINENO: error: --disable-atomic-spinlocks given but required atomic64 support is unavailable
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: --disable-atomic-spinlocks given but required atomic64 support is unavailable
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }; }
-
-fi
-
+ KERNELCPPFLAGS="${KERNELCPPFLAGS} -DNDEBUG"
+ DEBUG_CFLAGS="-DNDEBUG"
+ DEBUG_SPL="_without_debug"
fi
- { $as_echo "$as_me:$LINENO: checking whether atomic types use spinlocks" >&5
-$as_echo_n "checking whether atomic types use spinlocks... " >&6; }
- { $as_echo "$as_me:$LINENO: result: $enable_atomic_spinlocks" >&5
-$as_echo "$enable_atomic_spinlocks" >&6; }
-
- { $as_echo "$as_me:$LINENO: checking whether kernel defines atomic64_t" >&5
-$as_echo_n "checking whether kernel defines atomic64_t... " >&6; }
- { $as_echo "$as_me:$LINENO: result: $have_atomic64_t" >&5
-$as_echo "$have_atomic64_t" >&6; }
-
-
- tmp_flags="$EXTRA_KCFLAGS"
- EXTRA_KCFLAGS="-Werror"
- { $as_echo "$as_me:$LINENO: checking whether old 2-argument shrinker exists" >&5
-$as_echo_n "checking whether old 2-argument shrinker exists... " >&6; }
-
-
-cat confdefs.h - <<_ACEOF >conftest.c
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
- #include <linux/mm.h>
-
- int shrinker_cb(int nr_to_scan, gfp_t gfp_mask);
-int
-main (void)
-{
- struct shrinker cache_shrinker = {
- .shrink = shrinker_cb,
- .seeks = DEFAULT_SEEKS,
- };
- register_shrinker(&cache_shrinker);
+ { $as_echo "$as_me:$LINENO: result: $enable_debug" >&5
+$as_echo "$enable_debug" >&6; }
- ;
- return 0;
-}
-_ACEOF
+ # Check whether --enable-debug-kmem was given.
+if test "${enable_debug_kmem+set}" = set; then
+ enableval=$enable_debug_kmem;
+else
+ enable_debug_kmem=no
+fi
- rm -Rf build && mkdir -p build && touch build/conftest.mod.c
- echo "obj-m := conftest.o" >build/Makefile
- modpost_flag=''
- test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage
- if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } >/dev/null && { ac_try='test -s build/conftest.o'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ if test "x$enable_debug_kmem" = xyes; then
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
+ KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG_KMEM"
+ DEBUG_KMEM="_with_debug_kmem"
cat >>confdefs.h <<\_ACEOF
-#define HAVE_2ARGS_OLD_SHRINKER_CALLBACK 1
+#define DEBUG_KMEM 1
_ACEOF
else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
- { $as_echo "$as_me:$LINENO: checking whether old 3-argument shrinker exists" >&5
-$as_echo_n "checking whether old 3-argument shrinker exists... " >&6; }
+ DEBUG_KMEM="_without_debug_kmem"
+fi
-cat confdefs.h - <<_ACEOF >conftest.c
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
- #include <linux/mm.h>
+ { $as_echo "$as_me:$LINENO: checking whether basic kmem accounting is enabled" >&5
+$as_echo_n "checking whether basic kmem accounting is enabled... " >&6; }
+ { $as_echo "$as_me:$LINENO: result: $enable_debug_kmem" >&5
+$as_echo "$enable_debug_kmem" >&6; }
- int shrinker_cb(struct shrinker *, int nr_to_scan,
- gfp_t gfp_mask);
-int
-main (void)
-{
+ # Check whether --enable-debug-kmem-tracking was given.
+if test "${enable_debug_kmem_tracking+set}" = set; then
+ enableval=$enable_debug_kmem_tracking;
+else
+ enable_debug_kmem_tracking=no
+fi
- struct shrinker cache_shrinker = {
- .shrink = shrinker_cb,
- .seeks = DEFAULT_SEEKS,
- };
- register_shrinker(&cache_shrinker);
- ;
- return 0;
-}
+ if test "x$enable_debug_kmem_tracking" = xyes; then
+
+ KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG_KMEM_TRACKING"
+ DEBUG_KMEM_TRACKING="_with_debug_kmem_tracking"
+cat >>confdefs.h <<\_ACEOF
+#define DEBUG_KMEM_TRACKING 1
_ACEOF
- rm -Rf build && mkdir -p build && touch build/conftest.mod.c
- echo "obj-m := conftest.o" >build/Makefile
- modpost_flag=''
- test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage
- if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } >/dev/null && { ac_try='test -s build/conftest.o'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+else
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
+ DEBUG_KMEM_TRACKING="_without_debug_kmem_tracking"
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_3ARGS_SHRINKER_CALLBACK 1
-_ACEOF
+fi
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
- { $as_echo "$as_me:$LINENO: checking whether new 2-argument shrinker exists" >&5
-$as_echo_n "checking whether new 2-argument shrinker exists... " >&6; }
+ { $as_echo "$as_me:$LINENO: checking whether detailed kmem tracking is enabled" >&5
+$as_echo_n "checking whether detailed kmem tracking is enabled... " >&6; }
+ { $as_echo "$as_me:$LINENO: result: $enable_debug_kmem_tracking" >&5
+$as_echo "$enable_debug_kmem_tracking" >&6; }
+
+ { $as_echo "$as_me:$LINENO: checking whether modules can be built" >&5
+$as_echo_n "checking whether modules can be built... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.c
/* end confdefs.h. */
- #include <linux/mm.h>
-
- int shrinker_cb(struct shrinker *,
- struct shrink_control *sc);
-
int
main (void)
{
- struct shrinker cache_shrinker = {
- .shrink = shrinker_cb,
- .seeks = DEFAULT_SEEKS,
- };
- register_shrinker(&cache_shrinker);
-
;
return 0;
}
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- { $as_echo "$as_me:$LINENO: result: yes" >&5
+ { $as_echo "$as_me:$LINENO: result: yes" >&5
$as_echo "yes" >&6; }
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_2ARGS_NEW_SHRINKER_CALLBACK 1
-_ACEOF
-
-
else
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- { $as_echo "$as_me:$LINENO: result: no" >&5
+ { $as_echo "$as_me:$LINENO: result: no" >&5
$as_echo "no" >&6; }
- { $as_echo "$as_me:$LINENO: checking whether ->count_objects callback exists" >&5
-$as_echo_n "checking whether ->count_objects callback exists... " >&6; }
+ if test "x$enable_linux_builtin" != xyes; then
+ { { $as_echo "$as_me:$LINENO: error: *** Unable to build an empty module." >&5
+$as_echo "$as_me: error: *** Unable to build an empty module." >&2;}
+ { (exit 1); exit 1; }; }
+ else
+ { { $as_echo "$as_me:$LINENO: error:
+ *** Unable to build an empty module.
+ *** Please run 'make scripts' inside the kernel source tree." >&5
+$as_echo "$as_me: error:
+ *** Unable to build an empty module.
+ *** Please run 'make scripts' inside the kernel source tree." >&2;}
+ { (exit 1); exit 1; }; }
+ fi
-cat confdefs.h - <<_ACEOF >conftest.c
-/* confdefs.h. */
+
+fi
+
+ rm -Rf build
+
+
+
+ if test "x$cross_compiling" != xyes; then
+
+ if test "$cross_compiling" = yes; then
+ { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }; }
+else
+ cat >conftest.$ac_ext <<_ACEOF
+
+ /* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-
- #include <linux/mm.h>
-
- unsigned long shrinker_cb(
- struct shrinker *,
- struct shrink_control *sc);
+ #include "$LINUX/include/linux/license.h"
int
-main (void)
+main ()
{
- struct shrinker cache_shrinker = {
- .count_objects = shrinker_cb,
- .scan_objects = shrinker_cb,
- .seeks = DEFAULT_SEEKS,
- };
- register_shrinker(&cache_shrinker);
+ return !license_is_gpl_compatible(
+ "$SPL_META_LICENSE");
;
return 0;
}
_ACEOF
-
-
- rm -Rf build && mkdir -p build && touch build/conftest.mod.c
- echo "obj-m := conftest.o" >build/Makefile
- modpost_flag=''
- test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage
- if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>&5
ac_status=$?
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } >/dev/null && { ac_try='test -s build/conftest.o'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
cat >>confdefs.h <<\_ACEOF
-#define HAVE_SPLIT_SHRINKER_CALLBACK 1
+#define SPL_IS_GPL_COMPATIBLE 1
_ACEOF
else
- $as_echo "$as_me: failed program was:" >&5
+ $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- { { $as_echo "$as_me:$LINENO: error: error" >&5
-$as_echo "$as_me: error: error" >&2;}
- { (exit 1); exit 1; }; }
-
+( exit $ac_status )
fi
-
- rm -Rf build
-
-
-
-
-
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
- rm -Rf build
-
-
-
fi
- rm -Rf build
-
-
-
+ # Check whether --enable-atomic-spinlocks was given.
+if test "${enable_atomic_spinlocks+set}" = set; then
+ enableval=$enable_atomic_spinlocks;
+else
+ enable_atomic_spinlocks=check
fi
- rm -Rf build
-
-
- EXTRA_KCFLAGS="$tmp_flags"
-
- { $as_echo "$as_me:$LINENO: checking whether struct ctl_table has ctl_name" >&5
-$as_echo_n "checking whether struct ctl_table has ctl_name... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.c
/* end confdefs.h. */
- #include <linux/sysctl.h>
+ #include <linux/fs.h>
int
main (void)
{
- struct ctl_table ctl __attribute__ ((unused));
- ctl.ctl_name = 0;
+ atomic64_t *ptr __attribute__ ((unused));
;
return 0;
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
+ have_atomic64_t=yes
cat >>confdefs.h <<\_ACEOF
-#define HAVE_CTL_NAME 1
+#define HAVE_ATOMIC64_T 1
_ACEOF
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
+ have_atomic64_t=no
+ if test "x$enable_atomic_spinlocks" = xcheck; then
+
+ if test "x$have_atomic64_t" = xyes; then
+
+ enable_atomic_spinlocks=no
+
+else
+
+ enable_atomic_spinlocks=yes
+
+fi
+
+
+fi
+
+
+ if test "x$enable_atomic_spinlocks" = xyes; then
+
+
+cat >>confdefs.h <<\_ACEOF
+#define ATOMIC_SPINLOCK 1
+_ACEOF
+
+
+else
+
+ if test "x$have_atomic64_t" = xno; then
+
+ { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: --disable-atomic-spinlocks given but required atomic64 support is unavailable
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: --disable-atomic-spinlocks given but required atomic64 support is unavailable
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }; }
+
+fi
+
+
+fi
+
+
+ { $as_echo "$as_me:$LINENO: checking whether atomic types use spinlocks" >&5
+$as_echo_n "checking whether atomic types use spinlocks... " >&6; }
+ { $as_echo "$as_me:$LINENO: result: $enable_atomic_spinlocks" >&5
+$as_echo "$enable_atomic_spinlocks" >&6; }
+
+ { $as_echo "$as_me:$LINENO: checking whether kernel defines atomic64_t" >&5
+$as_echo_n "checking whether kernel defines atomic64_t... " >&6; }
+ { $as_echo "$as_me:$LINENO: result: $have_atomic64_t" >&5
+$as_echo "$have_atomic64_t" >&6; }
- { $as_echo "$as_me:$LINENO: checking whether CONFIG_TRIM_UNUSED_KSYM is disabled" >&5
-$as_echo_n "checking whether CONFIG_TRIM_UNUSED_KSYM is disabled... " >&6; }
+
+ tmp_flags="$EXTRA_KCFLAGS"
+ EXTRA_KCFLAGS="-Werror"
+ { $as_echo "$as_me:$LINENO: checking whether old 2-argument shrinker exists" >&5
+$as_echo_n "checking whether old 2-argument shrinker exists... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.c
/* end confdefs.h. */
- #if defined(CONFIG_TRIM_UNUSED_KSYMS)
- #error CONFIG_TRIM_UNUSED_KSYMS not defined
- #endif
+ #include <linux/mm.h>
+
+ int shrinker_cb(int nr_to_scan, gfp_t gfp_mask);
int
main (void)
{
+ struct shrinker cache_shrinker = {
+ .shrink = shrinker_cb,
+ .seeks = DEFAULT_SEEKS,
+ };
+ register_shrinker(&cache_shrinker);
+
;
return 0;
}
{ $as_echo "$as_me:$LINENO: result: yes" >&5
$as_echo "yes" >&6; }
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_2ARGS_OLD_SHRINKER_CALLBACK 1
+_ACEOF
+
+
else
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
{ $as_echo "$as_me:$LINENO: result: no" >&5
$as_echo "no" >&6; }
- { { $as_echo "$as_me:$LINENO: error:
- *** This kernel has unused symbols trimming enabled, please disable.
- *** Rebuild the kernel with CONFIG_TRIM_UNUSED_KSYMS=n set." >&5
-$as_echo "$as_me: error:
- *** This kernel has unused symbols trimming enabled, please disable.
- *** Rebuild the kernel with CONFIG_TRIM_UNUSED_KSYMS=n set." >&2;}
- { (exit 1); exit 1; }; }
-
-
-
-fi
-
- rm -Rf build
-
-
-
-
- { $as_echo "$as_me:$LINENO: checking whether PDE_DATA() is available" >&5
-$as_echo_n "checking whether PDE_DATA() is available... " >&6; }
-
+ { $as_echo "$as_me:$LINENO: checking whether old 3-argument shrinker exists" >&5
+$as_echo_n "checking whether old 3-argument shrinker exists... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.c
/* end confdefs.h. */
- #include <linux/proc_fs.h>
+ #include <linux/mm.h>
+
+ int shrinker_cb(struct shrinker *, int nr_to_scan,
+ gfp_t gfp_mask);
int
main (void)
{
- PDE_DATA(NULL);
+ struct shrinker cache_shrinker = {
+ .shrink = shrinker_cb,
+ .seeks = DEFAULT_SEEKS,
+ };
+ register_shrinker(&cache_shrinker);
;
return 0;
ac_status=$?
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- rc=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
- rc=1
-
-
-fi
-
- rm -Rf build
-
-
- if test $rc -ne 0; then :
-
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-
- else
- if test "x$enable_linux_builtin" != xyes; then
-
- grep -q -E '[[:space:]]PDE_DATA[[:space:]]' \
- $LINUX_OBJ/Module*.symvers 2>/dev/null
- rc=$?
- if test $rc -ne 0; then
- export=0
- for file in ; do
- grep -q -E "EXPORT_SYMBOL.*(PDE_DATA)" \
- "$LINUX_OBJ/$file" 2>/dev/null
- rc=$?
- if test $rc -eq 0; then
- export=1
- break;
- fi
- done
- if test $export -eq 0; then :
- rc=1
- else :
- rc=0
- fi
- else :
- rc=0
- fi
-
- fi
- if test $rc -ne 0; then :
-
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-
- else :
- { $as_echo "$as_me:$LINENO: result: yes" >&5
+ { $as_echo "$as_me:$LINENO: result: yes" >&5
$as_echo "yes" >&6; }
cat >>confdefs.h <<\_ACEOF
-#define HAVE_PDE_DATA 1
+#define HAVE_3ARGS_SHRINKER_CALLBACK 1
_ACEOF
- fi
- fi
-
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
- tmp_flags="$EXTRA_KCFLAGS"
- EXTRA_KCFLAGS="-Werror"
- { $as_echo "$as_me:$LINENO: checking whether set_fs_pwd() requires const struct path *" >&5
-$as_echo_n "checking whether set_fs_pwd() requires const struct path *... " >&6; }
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+ { $as_echo "$as_me:$LINENO: checking whether new 2-argument shrinker exists" >&5
+$as_echo_n "checking whether new 2-argument shrinker exists... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.c
/* end confdefs.h. */
- #include <linux/spinlock.h>
- #include <linux/fs_struct.h>
- #include <linux/path.h>
- void (*const set_fs_pwd_func)
- (struct fs_struct *, const struct path *)
- = set_fs_pwd;
+ #include <linux/mm.h>
+
+ int shrinker_cb(struct shrinker *,
+ struct shrink_control *sc);
int
main (void)
{
- return 0;
+ struct shrinker cache_shrinker = {
+ .shrink = shrinker_cb,
+ .seeks = DEFAULT_SEEKS,
+ };
+ register_shrinker(&cache_shrinker);
;
return 0;
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- { $as_echo "$as_me:$LINENO: result: yes" >&5
+ { $as_echo "$as_me:$LINENO: result: yes" >&5
$as_echo "yes" >&6; }
cat >>confdefs.h <<\_ACEOF
-#define HAVE_SET_FS_PWD_WITH_CONST 1
+#define HAVE_2ARGS_NEW_SHRINKER_CALLBACK 1
_ACEOF
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+ { $as_echo "$as_me:$LINENO: checking whether ->count_objects callback exists" >&5
+$as_echo_n "checking whether ->count_objects callback exists... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.c
/* end confdefs.h. */
- #include <linux/spinlock.h>
- #include <linux/fs_struct.h>
- #include <linux/path.h>
- void (*const set_fs_pwd_func)
- (struct fs_struct *, struct path *)
- = set_fs_pwd;
+ #include <linux/mm.h>
+
+ unsigned long shrinker_cb(
+ struct shrinker *,
+ struct shrink_control *sc);
int
main (void)
{
- return 0;
+ struct shrinker cache_shrinker = {
+ .count_objects = shrinker_cb,
+ .scan_objects = shrinker_cb,
+ .seeks = DEFAULT_SEEKS,
+ };
+ register_shrinker(&cache_shrinker);
;
return 0;
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
+ { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_SPLIT_SHRINKER_CALLBACK 1
+_ACEOF
+
else
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- { { $as_echo "$as_me:$LINENO: error: unknown" >&5
-$as_echo "$as_me: error: unknown" >&2;}
- { (exit 1); exit 1; }; }
+ { { $as_echo "$as_me:$LINENO: error: error" >&5
+$as_echo "$as_me: error: error" >&2;}
+ { (exit 1); exit 1; }; }
+
+
+
+fi
+
+ rm -Rf build
+
+
+
+
+
+fi
+
+ rm -Rf build
+
+
EXTRA_KCFLAGS="$tmp_flags"
- { $as_echo "$as_me:$LINENO: checking whether vfs_unlink() wants 2 args" >&5
-$as_echo_n "checking whether vfs_unlink() wants 2 args... " >&6; }
+
+ { $as_echo "$as_me:$LINENO: checking whether struct ctl_table has ctl_name" >&5
+$as_echo_n "checking whether struct ctl_table has ctl_name... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.c
/* end confdefs.h. */
- #include <linux/fs.h>
+ #include <linux/sysctl.h>
int
main (void)
{
- vfs_unlink((struct inode *) NULL, (struct dentry *) NULL);
+ struct ctl_table ctl __attribute__ ((unused));
+ ctl.ctl_name = 0;
;
return 0;
$as_echo "yes" >&6; }
cat >>confdefs.h <<\_ACEOF
-#define HAVE_2ARGS_VFS_UNLINK 1
+#define HAVE_CTL_NAME 1
_ACEOF
{ $as_echo "$as_me:$LINENO: result: no" >&5
$as_echo "no" >&6; }
- { $as_echo "$as_me:$LINENO: checking whether vfs_unlink() wants 3 args" >&5
-$as_echo_n "checking whether vfs_unlink() wants 3 args... " >&6; }
+
+
+
+fi
+
+ rm -Rf build
+
+
+
+
+ { $as_echo "$as_me:$LINENO: checking whether CONFIG_TRIM_UNUSED_KSYM is disabled" >&5
+$as_echo_n "checking whether CONFIG_TRIM_UNUSED_KSYM is disabled... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.c
/* end confdefs.h. */
- #include <linux/fs.h>
+ #if defined(CONFIG_TRIM_UNUSED_KSYMS)
+ #error CONFIG_TRIM_UNUSED_KSYMS not defined
+ #endif
int
main (void)
{
- vfs_unlink((struct inode *) NULL,
- (struct dentry *) NULL,
- (struct inode **) NULL);
-
;
return 0;
}
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- { $as_echo "$as_me:$LINENO: result: yes" >&5
+ { $as_echo "$as_me:$LINENO: result: yes" >&5
$as_echo "yes" >&6; }
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_3ARGS_VFS_UNLINK 1
-_ACEOF
-
-
else
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- { { $as_echo "$as_me:$LINENO: error: no" >&5
-$as_echo "$as_me: error: no" >&2;}
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+ { { $as_echo "$as_me:$LINENO: error:
+ *** This kernel has unused symbols trimming enabled, please disable.
+ *** Rebuild the kernel with CONFIG_TRIM_UNUSED_KSYMS=n set." >&5
+$as_echo "$as_me: error:
+ *** This kernel has unused symbols trimming enabled, please disable.
+ *** Rebuild the kernel with CONFIG_TRIM_UNUSED_KSYMS=n set." >&2;}
{ (exit 1); exit 1; }; }
+ { $as_echo "$as_me:$LINENO: checking whether PDE_DATA() is available" >&5
+$as_echo_n "checking whether PDE_DATA() is available... " >&6; }
-fi
-
- rm -Rf build
-
-
-
- { $as_echo "$as_me:$LINENO: checking whether vfs_rename() wants 4 args" >&5
-$as_echo_n "checking whether vfs_rename() wants 4 args... " >&6; }
-
cat confdefs.h - <<_ACEOF >conftest.c
/* confdefs.h. */
/* end confdefs.h. */
- #include <linux/fs.h>
+ #include <linux/proc_fs.h>
int
main (void)
{
- vfs_rename((struct inode *) NULL, (struct dentry *) NULL,
- (struct inode *) NULL, (struct dentry *) NULL);
+ PDE_DATA(NULL);
;
return 0;
ac_status=$?
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
+ rc=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+ rc=1
+
+
+fi
+
+ rm -Rf build
+
+
+ if test $rc -ne 0; then :
+
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+
+ else
+ if test "x$enable_linux_builtin" != xyes; then
+
+ grep -q -E '[[:space:]]PDE_DATA[[:space:]]' \
+ $LINUX_OBJ/Module*.symvers 2>/dev/null
+ rc=$?
+ if test $rc -ne 0; then
+ export=0
+ for file in ; do
+ grep -q -E "EXPORT_SYMBOL.*(PDE_DATA)" \
+ "$LINUX_OBJ/$file" 2>/dev/null
+ rc=$?
+ if test $rc -eq 0; then
+ export=1
+ break;
+ fi
+ done
+ if test $export -eq 0; then :
+ rc=1
+ else :
+ rc=0
+ fi
+ else :
+ rc=0
+ fi
+
+ fi
+ if test $rc -ne 0; then :
+
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+
+ else :
{ $as_echo "$as_me:$LINENO: result: yes" >&5
$as_echo "yes" >&6; }
cat >>confdefs.h <<\_ACEOF
-#define HAVE_4ARGS_VFS_RENAME 1
+#define HAVE_PDE_DATA 1
_ACEOF
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+ fi
+ fi
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
- { $as_echo "$as_me:$LINENO: checking whether vfs_rename() wants 5 args" >&5
-$as_echo_n "checking whether vfs_rename() wants 5 args... " >&6; }
+
+ tmp_flags="$EXTRA_KCFLAGS"
+ EXTRA_KCFLAGS="-Werror"
+ { $as_echo "$as_me:$LINENO: checking whether set_fs_pwd() requires const struct path *" >&5
+$as_echo_n "checking whether set_fs_pwd() requires const struct path *... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.c
/* end confdefs.h. */
- #include <linux/fs.h>
+ #include <linux/spinlock.h>
+ #include <linux/fs_struct.h>
+ #include <linux/path.h>
+ void (*const set_fs_pwd_func)
+ (struct fs_struct *, const struct path *)
+ = set_fs_pwd;
int
main (void)
{
- vfs_rename((struct inode *) NULL,
- (struct dentry *) NULL,
- (struct inode *) NULL,
- (struct dentry *) NULL,
- (struct inode **) NULL);
+ return 0;
;
return 0;
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- { $as_echo "$as_me:$LINENO: result: yes" >&5
+ { $as_echo "$as_me:$LINENO: result: yes" >&5
$as_echo "yes" >&6; }
cat >>confdefs.h <<\_ACEOF
-#define HAVE_5ARGS_VFS_RENAME 1
+#define HAVE_SET_FS_PWD_WITH_CONST 1
_ACEOF
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
- { $as_echo "$as_me:$LINENO: checking whether vfs_rename() wants 6 args" >&5
-$as_echo_n "checking whether vfs_rename() wants 6 args... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.c
/* end confdefs.h. */
- #include <linux/fs.h>
+ #include <linux/spinlock.h>
+ #include <linux/fs_struct.h>
+ #include <linux/path.h>
+ void (*const set_fs_pwd_func)
+ (struct fs_struct *, struct path *)
+ = set_fs_pwd;
int
main (void)
{
- vfs_rename((struct inode *) NULL,
- (struct dentry *) NULL,
- (struct inode *) NULL,
- (struct dentry *) NULL,
- (struct inode **) NULL,
- (unsigned int) 0);
+ return 0;
;
return 0;
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_6ARGS_VFS_RENAME 1
-_ACEOF
-
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
else
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- { { $as_echo "$as_me:$LINENO: error: no" >&5
-$as_echo "$as_me: error: no" >&2;}
+ { { $as_echo "$as_me:$LINENO: error: unknown" >&5
+$as_echo "$as_me: error: unknown" >&2;}
{ (exit 1); exit 1; }; }
rm -Rf build
-
-
-
-fi
-
- rm -Rf build
-
-
+ EXTRA_KCFLAGS="$tmp_flags"
{ $as_echo "$as_me:$LINENO: checking whether vfs_fsync() wants 2 args" >&5
+ { $as_echo "$as_me:$LINENO: checking whether io_schedule_timeout() is available" >&5
+$as_echo_n "checking whether io_schedule_timeout() is available... " >&6; }
+
+
+
+cat confdefs.h - <<_ACEOF >conftest.c
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+
+ #include <linux/sched.h>
+
+int
+main (void)
+{
+
+ (void) io_schedule_timeout(1);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+
+
+ rm -Rf build && mkdir -p build && touch build/conftest.mod.c
+ echo "obj-m := conftest.o" >build/Makefile
+ modpost_flag=''
+ test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage
+ if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } >/dev/null && { ac_try='test -s build/conftest.o'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ rc=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+ rc=1
+
+
+fi
+
+ rm -Rf build
+
+
+ if test $rc -ne 0; then :
+
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+
+ else
+ if test "x$enable_linux_builtin" != xyes; then
+
+ grep -q -E '[[:space:]]io_schedule_timeout[[:space:]]' \
+ $LINUX_OBJ/Module*.symvers 2>/dev/null
+ rc=$?
+ if test $rc -ne 0; then
+ export=0
+ for file in ; do
+ grep -q -E "EXPORT_SYMBOL.*(io_schedule_timeout)" \
+ "$LINUX_OBJ/$file" 2>/dev/null
+ rc=$?
+ if test $rc -eq 0; then
+ export=1
+ break;
+ fi
+ done
+ if test $export -eq 0; then :
+ rc=1
+ else :
+ rc=0
+ fi
+ else :
+ rc=0
+ fi
+
+ fi
+ if test $rc -ne 0; then :
+
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+
+ else :
+
+ { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_IO_SCHEDULE_TIMEOUT 1
+_ACEOF
+
+
+ fi
+ fi
+
+
+
{ $as_echo "$as_me:$LINENO: checking whether kernel_write() takes loff_t pointer" >&5
$as_echo_n "checking whether kernel_write() takes loff_t pointer... " >&6; }
tmp_flags="$EXTRA_KCFLAGS"
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by spl $as_me 0.7.6, which was
+This file was extended by spl $as_me 0.7.8, which was
generated by GNU Autoconf 2.63. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_version="\\
-spl config.status 0.7.6
+spl config.status 0.7.8
configured by $0, generated by GNU Autoconf 2.63,
with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
DIST_COMMON = $(am__kernel_HEADERS_DIST) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/kernel-ctl-table-name.m4 \
+ $(top_srcdir)/config/kernel-fallocate.m4 \
+ $(top_srcdir)/config/kernel-group-info.m4 \
+ $(top_srcdir)/config/kernel-inode-lock.m4 \
+ $(top_srcdir)/config/kernel-kmem-cache.m4 \
+ $(top_srcdir)/config/kernel-kuidgid.m4 \
+ $(top_srcdir)/config/kernel-pde-data.m4 \
+ $(top_srcdir)/config/kernel-rw.m4 \
+ $(top_srcdir)/config/kernel-rwsem.m4 \
+ $(top_srcdir)/config/kernel-sched.m4 \
+ $(top_srcdir)/config/kernel-set-fs-pwd.m4 \
+ $(top_srcdir)/config/kernel-shrinker.m4 \
+ $(top_srcdir)/config/kernel-spinlock.m4 \
+ $(top_srcdir)/config/kernel-timer.m4 \
+ $(top_srcdir)/config/kernel-trim-unused-symbols.m4 \
+ $(top_srcdir)/config/kernel-truncate-range.m4 \
+ $(top_srcdir)/config/kernel-urange-sleep.m4 \
+ $(top_srcdir)/config/kernel-vfs-fsync.m4 \
+ $(top_srcdir)/config/kernel-vfs-getattr.m4 \
+ $(top_srcdir)/config/kernel-wait.m4 \
+ $(top_srcdir)/config/kernel-zlib.m4 \
+ $(top_srcdir)/config/libtool.m4 \
$(top_srcdir)/config/ltoptions.m4 \
$(top_srcdir)/config/ltsugar.m4 \
$(top_srcdir)/config/ltversion.m4 \
DIST_COMMON = $(am__kernel_HEADERS_DIST) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/kernel-ctl-table-name.m4 \
+ $(top_srcdir)/config/kernel-fallocate.m4 \
+ $(top_srcdir)/config/kernel-group-info.m4 \
+ $(top_srcdir)/config/kernel-inode-lock.m4 \
+ $(top_srcdir)/config/kernel-kmem-cache.m4 \
+ $(top_srcdir)/config/kernel-kuidgid.m4 \
+ $(top_srcdir)/config/kernel-pde-data.m4 \
+ $(top_srcdir)/config/kernel-rw.m4 \
+ $(top_srcdir)/config/kernel-rwsem.m4 \
+ $(top_srcdir)/config/kernel-sched.m4 \
+ $(top_srcdir)/config/kernel-set-fs-pwd.m4 \
+ $(top_srcdir)/config/kernel-shrinker.m4 \
+ $(top_srcdir)/config/kernel-spinlock.m4 \
+ $(top_srcdir)/config/kernel-timer.m4 \
+ $(top_srcdir)/config/kernel-trim-unused-symbols.m4 \
+ $(top_srcdir)/config/kernel-truncate-range.m4 \
+ $(top_srcdir)/config/kernel-urange-sleep.m4 \
+ $(top_srcdir)/config/kernel-vfs-fsync.m4 \
+ $(top_srcdir)/config/kernel-vfs-getattr.m4 \
+ $(top_srcdir)/config/kernel-wait.m4 \
+ $(top_srcdir)/config/kernel-zlib.m4 \
+ $(top_srcdir)/config/libtool.m4 \
$(top_srcdir)/config/ltoptions.m4 \
$(top_srcdir)/config/ltsugar.m4 \
$(top_srcdir)/config/ltversion.m4 \
\*****************************************************************************/
#ifndef _SPL_FS_FS_SUBR_H
-#define _SPL_FS_FS_SUBR_H
+#define _SPL_FS_FS_SUBR_H
#endif /* SPL_FS_FS_SUBR_H */
DIST_COMMON = $(am__kernel_HEADERS_DIST) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/kernel-ctl-table-name.m4 \
+ $(top_srcdir)/config/kernel-fallocate.m4 \
+ $(top_srcdir)/config/kernel-group-info.m4 \
+ $(top_srcdir)/config/kernel-inode-lock.m4 \
+ $(top_srcdir)/config/kernel-kmem-cache.m4 \
+ $(top_srcdir)/config/kernel-kuidgid.m4 \
+ $(top_srcdir)/config/kernel-pde-data.m4 \
+ $(top_srcdir)/config/kernel-rw.m4 \
+ $(top_srcdir)/config/kernel-rwsem.m4 \
+ $(top_srcdir)/config/kernel-sched.m4 \
+ $(top_srcdir)/config/kernel-set-fs-pwd.m4 \
+ $(top_srcdir)/config/kernel-shrinker.m4 \
+ $(top_srcdir)/config/kernel-spinlock.m4 \
+ $(top_srcdir)/config/kernel-timer.m4 \
+ $(top_srcdir)/config/kernel-trim-unused-symbols.m4 \
+ $(top_srcdir)/config/kernel-truncate-range.m4 \
+ $(top_srcdir)/config/kernel-urange-sleep.m4 \
+ $(top_srcdir)/config/kernel-vfs-fsync.m4 \
+ $(top_srcdir)/config/kernel-vfs-getattr.m4 \
+ $(top_srcdir)/config/kernel-wait.m4 \
+ $(top_srcdir)/config/kernel-zlib.m4 \
+ $(top_srcdir)/config/libtool.m4 \
$(top_srcdir)/config/ltoptions.m4 \
$(top_srcdir)/config/ltsugar.m4 \
$(top_srcdir)/config/ltversion.m4 \
#define _SPL_MATH64_COMPAT_H
#ifndef abs64
-#define abs64(x) ({ uint64_t t = (x) >> 63; ((x) ^ t) - t; })
+/* CSTYLED */
+#define abs64(x) ({ uint64_t t = (x) >> 63; ((x) ^ t) - t; })
#endif
#endif /* _SPL_MATH64_COMPAT_H */
DIST_COMMON = $(am__kernel_HEADERS_DIST) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/kernel-ctl-table-name.m4 \
+ $(top_srcdir)/config/kernel-fallocate.m4 \
+ $(top_srcdir)/config/kernel-group-info.m4 \
+ $(top_srcdir)/config/kernel-inode-lock.m4 \
+ $(top_srcdir)/config/kernel-kmem-cache.m4 \
+ $(top_srcdir)/config/kernel-kuidgid.m4 \
+ $(top_srcdir)/config/kernel-pde-data.m4 \
+ $(top_srcdir)/config/kernel-rw.m4 \
+ $(top_srcdir)/config/kernel-rwsem.m4 \
+ $(top_srcdir)/config/kernel-sched.m4 \
+ $(top_srcdir)/config/kernel-set-fs-pwd.m4 \
+ $(top_srcdir)/config/kernel-shrinker.m4 \
+ $(top_srcdir)/config/kernel-spinlock.m4 \
+ $(top_srcdir)/config/kernel-timer.m4 \
+ $(top_srcdir)/config/kernel-trim-unused-symbols.m4 \
+ $(top_srcdir)/config/kernel-truncate-range.m4 \
+ $(top_srcdir)/config/kernel-urange-sleep.m4 \
+ $(top_srcdir)/config/kernel-vfs-fsync.m4 \
+ $(top_srcdir)/config/kernel-vfs-getattr.m4 \
+ $(top_srcdir)/config/kernel-wait.m4 \
+ $(top_srcdir)/config/kernel-zlib.m4 \
+ $(top_srcdir)/config/libtool.m4 \
$(top_srcdir)/config/ltoptions.m4 \
$(top_srcdir)/config/ltsugar.m4 \
$(top_srcdir)/config/ltversion.m4 \
\*****************************************************************************/
#ifndef _SPL_RPC_TYPES_H
-#define _SPL_RPC_TYPES_H
+#define _SPL_RPC_TYPES_H
typedef int bool_t;
\*****************************************************************************/
#ifndef _SPL_RPC_XDR_H
-#define _SPL_RPC_XDR_H
+#define _SPL_RPC_XDR_H
#include <sys/types.h>
#include <rpc/types.h>
struct xdr_ops;
typedef struct {
- struct xdr_ops *x_ops; /* Also used to let caller know if
- xdrmem_create() succeeds (sigh..) */
- caddr_t x_addr; /* Current buffer addr */
- caddr_t x_addr_end; /* End of the buffer */
- enum xdr_op x_op; /* Stream direction */
+ struct xdr_ops *x_ops; /* Let caller know xdrmem_create() succeeds */
+ caddr_t x_addr; /* Current buffer addr */
+ caddr_t x_addr_end; /* End of the buffer */
+ enum xdr_op x_op; /* Stream direction */
} XDR;
typedef bool_t (*xdrproc_t)(XDR *xdrs, void *ptr);
bool_t (*xdr_opaque)(XDR *, caddr_t, const uint_t);
bool_t (*xdr_string)(XDR *, char **, const uint_t);
bool_t (*xdr_array)(XDR *, caddr_t *, uint_t *, const uint_t,
- const uint_t, const xdrproc_t);
+ const uint_t, const xdrproc_t);
};
/*
* XDR control operator.
*/
-#define XDR_GET_BYTES_AVAIL 1
+#define XDR_GET_BYTES_AVAIL 1
struct xdr_bytesrec {
bool_t xc_is_last_record;
*/
void xdrmem_create(XDR *xdrs, const caddr_t addr, const uint_t size,
const enum xdr_op op);
-#define xdr_destroy(xdrs) ((void) 0) /* Currently not needed. If needed later,
- we'll add it to struct xdr_ops */
-#define xdr_control(xdrs, req, info) (xdrs)->x_ops->xdr_control((xdrs), \
- (req), (info))
+/* Currently not needed. If needed later, we'll add it to struct xdr_ops */
+#define xdr_destroy(xdrs) ((void) 0)
+
+#define xdr_control(xdrs, req, info) \
+ (xdrs)->x_ops->xdr_control((xdrs), (req), (info))
/*
* For precaution, the following are defined as static inlines instead of macros
*/
static inline bool_t xdr_char(XDR *xdrs, char *cp)
{
- return xdrs->x_ops->xdr_char(xdrs, cp);
+ return (xdrs->x_ops->xdr_char(xdrs, cp));
}
static inline bool_t xdr_u_short(XDR *xdrs, unsigned short *usp)
{
- return xdrs->x_ops->xdr_u_short(xdrs, usp);
+ return (xdrs->x_ops->xdr_u_short(xdrs, usp));
}
static inline bool_t xdr_short(XDR *xdrs, short *sp)
{
- BUILD_BUG_ON(sizeof(short) != 2);
- return xdrs->x_ops->xdr_u_short(xdrs, (unsigned short *) sp);
+ BUILD_BUG_ON(sizeof (short) != 2);
+ return (xdrs->x_ops->xdr_u_short(xdrs, (unsigned short *) sp));
}
static inline bool_t xdr_u_int(XDR *xdrs, unsigned *up)
{
- return xdrs->x_ops->xdr_u_int(xdrs, up);
+ return (xdrs->x_ops->xdr_u_int(xdrs, up));
}
static inline bool_t xdr_int(XDR *xdrs, int *ip)
{
- BUILD_BUG_ON(sizeof(int) != 4);
- return xdrs->x_ops->xdr_u_int(xdrs, (unsigned *) ip);
+ BUILD_BUG_ON(sizeof (int) != 4);
+ return (xdrs->x_ops->xdr_u_int(xdrs, (unsigned *)ip));
}
static inline bool_t xdr_u_longlong_t(XDR *xdrs, u_longlong_t *ullp)
{
- return xdrs->x_ops->xdr_u_longlong_t(xdrs, ullp);
+ return (xdrs->x_ops->xdr_u_longlong_t(xdrs, ullp));
}
static inline bool_t xdr_longlong_t(XDR *xdrs, longlong_t *llp)
{
- BUILD_BUG_ON(sizeof(longlong_t) != 8);
- return xdrs->x_ops->xdr_u_longlong_t(xdrs, (u_longlong_t *) llp);
+ BUILD_BUG_ON(sizeof (longlong_t) != 8);
+ return (xdrs->x_ops->xdr_u_longlong_t(xdrs, (u_longlong_t *)llp));
}
/*
*/
static inline bool_t xdr_opaque(XDR *xdrs, caddr_t cp, const uint_t cnt)
{
- return xdrs->x_ops->xdr_opaque(xdrs, cp, cnt);
+ return (xdrs->x_ops->xdr_opaque(xdrs, cp, cnt));
}
/*
*/
static inline bool_t xdr_string(XDR *xdrs, char **sp, const uint_t maxsize)
{
- return xdrs->x_ops->xdr_string(xdrs, sp, maxsize);
+ return (xdrs->x_ops->xdr_string(xdrs, sp, maxsize));
}
/*
DIST_COMMON = $(am__kernel_HEADERS_DIST) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/kernel-ctl-table-name.m4 \
+ $(top_srcdir)/config/kernel-fallocate.m4 \
+ $(top_srcdir)/config/kernel-group-info.m4 \
+ $(top_srcdir)/config/kernel-inode-lock.m4 \
+ $(top_srcdir)/config/kernel-kmem-cache.m4 \
+ $(top_srcdir)/config/kernel-kuidgid.m4 \
+ $(top_srcdir)/config/kernel-pde-data.m4 \
+ $(top_srcdir)/config/kernel-rw.m4 \
+ $(top_srcdir)/config/kernel-rwsem.m4 \
+ $(top_srcdir)/config/kernel-sched.m4 \
+ $(top_srcdir)/config/kernel-set-fs-pwd.m4 \
+ $(top_srcdir)/config/kernel-shrinker.m4 \
+ $(top_srcdir)/config/kernel-spinlock.m4 \
+ $(top_srcdir)/config/kernel-timer.m4 \
+ $(top_srcdir)/config/kernel-trim-unused-symbols.m4 \
+ $(top_srcdir)/config/kernel-truncate-range.m4 \
+ $(top_srcdir)/config/kernel-urange-sleep.m4 \
+ $(top_srcdir)/config/kernel-vfs-fsync.m4 \
+ $(top_srcdir)/config/kernel-vfs-getattr.m4 \
+ $(top_srcdir)/config/kernel-wait.m4 \
+ $(top_srcdir)/config/kernel-zlib.m4 \
+ $(top_srcdir)/config/libtool.m4 \
$(top_srcdir)/config/ltoptions.m4 \
$(top_srcdir)/config/ltsugar.m4 \
$(top_srcdir)/config/ltversion.m4 \
\*****************************************************************************/
#ifndef _SPL_SHARE_H
-#define _SPL_SHARE_H
+#define _SPL_SHARE_H
#endif /* SPL_SHARE_H */
\*****************************************************************************/
#ifndef _DEBUG_CTL_H
-#define _DEBUG_CTL_H
+#define _DEBUG_CTL_H
/*
* Contains shared definitions which both the user space
* and kernel space portions of splat must agree on.
*/
typedef struct spl_debug_header {
- int ph_len;
- int ph_flags;
- int ph_subsys;
- int ph_mask;
- int ph_cpu_id;
- int ph_sec;
- long ph_usec;
- int ph_stack;
- int ph_pid;
- int ph_line_num;
+ int ph_len;
+ int ph_flags;
+ int ph_subsys;
+ int ph_mask;
+ int ph_cpu_id;
+ int ph_sec;
+ long ph_usec;
+ int ph_stack;
+ int ph_pid;
+ int ph_line_num;
} spl_debug_header_t;
#endif /* _DEBUG_CTL_H */
\*****************************************************************************/
#ifndef _SPLAT_CTL_H
-#define _SPLAT_CTL_H
+#define _SPLAT_CTL_H
#include <linux/types.h>
* ensure 32-bit/64-bit interoperability over ioctl()'s only types with
* fixed sizes can be used.
*/
-#define SPLAT_NAME "splatctl"
-#define SPLAT_DEV "/dev/splatctl"
+#define SPLAT_NAME "splatctl"
+#define SPLAT_DEV "/dev/splatctl"
-#define SPLAT_NAME_SIZE 20
-#define SPLAT_DESC_SIZE 60
+#define SPLAT_NAME_SIZE 20
+#define SPLAT_DESC_SIZE 60
typedef struct splat_user {
char name[SPLAT_NAME_SIZE]; /* Short name */
} splat_cmd_t;
/* Valid ioctls */
-#define SPLAT_CFG _IOWR('f', 101, splat_cfg_t)
-#define SPLAT_CMD _IOWR('f', 102, splat_cmd_t)
+#define SPLAT_CFG _IOWR('f', 101, splat_cfg_t)
+#define SPLAT_CMD _IOWR('f', 102, splat_cmd_t)
/* Valid configuration commands */
-#define SPLAT_CFG_BUFFER_CLEAR 0x001 /* Clear text buffer */
-#define SPLAT_CFG_BUFFER_SIZE 0x002 /* Resize text buffer */
-#define SPLAT_CFG_SUBSYSTEM_COUNT 0x101 /* Number of subsystem */
-#define SPLAT_CFG_SUBSYSTEM_LIST 0x102 /* List of N subsystems */
-#define SPLAT_CFG_TEST_COUNT 0x201 /* Number of tests */
-#define SPLAT_CFG_TEST_LIST 0x202 /* List of N tests */
+#define SPLAT_CFG_BUFFER_CLEAR 0x001 /* Clear text buffer */
+#define SPLAT_CFG_BUFFER_SIZE 0x002 /* Resize text buffer */
+#define SPLAT_CFG_SUBSYSTEM_COUNT 0x101 /* Number of subsystem */
+#define SPLAT_CFG_SUBSYSTEM_LIST 0x102 /* List of N subsystems */
+#define SPLAT_CFG_TEST_COUNT 0x201 /* Number of tests */
+#define SPLAT_CFG_TEST_LIST 0x202 /* List of N tests */
/*
* Valid subsystem and test commands are defined in each subsystem as
* SPLAT_SUBSYSTEM_*. We do need to be careful to avoid collisions, the
* currently defined subsystems are as follows:
*/
-#define SPLAT_SUBSYSTEM_KMEM 0x0100
-#define SPLAT_SUBSYSTEM_TASKQ 0x0200
-#define SPLAT_SUBSYSTEM_KRNG 0x0300
-#define SPLAT_SUBSYSTEM_MUTEX 0x0400
-#define SPLAT_SUBSYSTEM_CONDVAR 0x0500
-#define SPLAT_SUBSYSTEM_THREAD 0x0600
-#define SPLAT_SUBSYSTEM_RWLOCK 0x0700
-#define SPLAT_SUBSYSTEM_TIME 0x0800
-#define SPLAT_SUBSYSTEM_VNODE 0x0900
-#define SPLAT_SUBSYSTEM_KOBJ 0x0a00
-#define SPLAT_SUBSYSTEM_ATOMIC 0x0b00
-#define SPLAT_SUBSYSTEM_LIST 0x0c00
-#define SPLAT_SUBSYSTEM_GENERIC 0x0d00
-#define SPLAT_SUBSYSTEM_CRED 0x0e00
-#define SPLAT_SUBSYSTEM_ZLIB 0x0f00
-#define SPLAT_SUBSYSTEM_LINUX 0x1000
-#define SPLAT_SUBSYSTEM_UNKNOWN 0xff00
+#define SPLAT_SUBSYSTEM_KMEM 0x0100
+#define SPLAT_SUBSYSTEM_TASKQ 0x0200
+#define SPLAT_SUBSYSTEM_KRNG 0x0300
+#define SPLAT_SUBSYSTEM_MUTEX 0x0400
+#define SPLAT_SUBSYSTEM_CONDVAR 0x0500
+#define SPLAT_SUBSYSTEM_THREAD 0x0600
+#define SPLAT_SUBSYSTEM_RWLOCK 0x0700
+#define SPLAT_SUBSYSTEM_TIME 0x0800
+#define SPLAT_SUBSYSTEM_VNODE 0x0900
+#define SPLAT_SUBSYSTEM_KOBJ 0x0a00
+#define SPLAT_SUBSYSTEM_ATOMIC 0x0b00
+#define SPLAT_SUBSYSTEM_LIST 0x0c00
+#define SPLAT_SUBSYSTEM_GENERIC 0x0d00
+#define SPLAT_SUBSYSTEM_CRED 0x0e00
+#define SPLAT_SUBSYSTEM_ZLIB 0x0f00
+#define SPLAT_SUBSYSTEM_LINUX 0x1000
+#define SPLAT_SUBSYSTEM_UNKNOWN 0xff00
#endif /* _SPLAT_CTL_H */
\*****************************************************************************/
#ifndef _SPL_STRINGS_H
-#define _SPL_STRINGS_H
+#define _SPL_STRINGS_H
#endif /* SPL_STRINGS_H */
DIST_COMMON = $(am__kernel_HEADERS_DIST) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/kernel-ctl-table-name.m4 \
+ $(top_srcdir)/config/kernel-fallocate.m4 \
+ $(top_srcdir)/config/kernel-group-info.m4 \
+ $(top_srcdir)/config/kernel-inode-lock.m4 \
+ $(top_srcdir)/config/kernel-kmem-cache.m4 \
+ $(top_srcdir)/config/kernel-kuidgid.m4 \
+ $(top_srcdir)/config/kernel-pde-data.m4 \
+ $(top_srcdir)/config/kernel-rw.m4 \
+ $(top_srcdir)/config/kernel-rwsem.m4 \
+ $(top_srcdir)/config/kernel-sched.m4 \
+ $(top_srcdir)/config/kernel-set-fs-pwd.m4 \
+ $(top_srcdir)/config/kernel-shrinker.m4 \
+ $(top_srcdir)/config/kernel-spinlock.m4 \
+ $(top_srcdir)/config/kernel-timer.m4 \
+ $(top_srcdir)/config/kernel-trim-unused-symbols.m4 \
+ $(top_srcdir)/config/kernel-truncate-range.m4 \
+ $(top_srcdir)/config/kernel-urange-sleep.m4 \
+ $(top_srcdir)/config/kernel-vfs-fsync.m4 \
+ $(top_srcdir)/config/kernel-vfs-getattr.m4 \
+ $(top_srcdir)/config/kernel-wait.m4 \
+ $(top_srcdir)/config/kernel-zlib.m4 \
+ $(top_srcdir)/config/libtool.m4 \
$(top_srcdir)/config/ltoptions.m4 \
$(top_srcdir)/config/ltsugar.m4 \
$(top_srcdir)/config/ltversion.m4 \
\*****************************************************************************/
#ifndef _SPL_ACL_H
-#define _SPL_ACL_H
+#define _SPL_ACL_H
#include <sys/types.h>
typedef struct ace {
- uid_t a_who;
- uint32_t a_access_mask;
- uint16_t a_flags;
- uint16_t a_type;
+ uid_t a_who;
+ uint32_t a_access_mask;
+ uint16_t a_flags;
+ uint16_t a_type;
} ace_t;
typedef struct ace_object {
- uid_t a_who; /* uid or gid */
- uint32_t a_access_mask; /* read,write,... */
- uint16_t a_flags; /* see below */
- uint16_t a_type; /* allow or deny */
- uint8_t a_obj_type[16]; /* obj type */
- uint8_t a_inherit_obj_type[16]; /* inherit obj */
+ uid_t a_who; /* uid or gid */
+ uint32_t a_access_mask; /* read,write,... */
+ uint16_t a_flags; /* see below */
+ uint16_t a_type; /* allow or deny */
+ uint8_t a_obj_type[16]; /* obj type */
+ uint8_t a_inherit_obj_type[16]; /* inherit obj */
} ace_object_t;
-#define MAX_ACL_ENTRIES 1024
+#define MAX_ACL_ENTRIES 1024
-#define ACE_READ_DATA 0x00000001
-#define ACE_LIST_DIRECTORY 0x00000001
-#define ACE_WRITE_DATA 0x00000002
-#define ACE_ADD_FILE 0x00000002
-#define ACE_APPEND_DATA 0x00000004
-#define ACE_ADD_SUBDIRECTORY 0x00000004
-#define ACE_READ_NAMED_ATTRS 0x00000008
-#define ACE_WRITE_NAMED_ATTRS 0x00000010
-#define ACE_EXECUTE 0x00000020
-#define ACE_DELETE_CHILD 0x00000040
-#define ACE_READ_ATTRIBUTES 0x00000080
-#define ACE_WRITE_ATTRIBUTES 0x00000100
-#define ACE_DELETE 0x00010000
-#define ACE_READ_ACL 0x00020000
-#define ACE_WRITE_ACL 0x00040000
-#define ACE_WRITE_OWNER 0x00080000
-#define ACE_SYNCHRONIZE 0x00100000
+#define ACE_READ_DATA 0x00000001
+#define ACE_LIST_DIRECTORY 0x00000001
+#define ACE_WRITE_DATA 0x00000002
+#define ACE_ADD_FILE 0x00000002
+#define ACE_APPEND_DATA 0x00000004
+#define ACE_ADD_SUBDIRECTORY 0x00000004
+#define ACE_READ_NAMED_ATTRS 0x00000008
+#define ACE_WRITE_NAMED_ATTRS 0x00000010
+#define ACE_EXECUTE 0x00000020
+#define ACE_DELETE_CHILD 0x00000040
+#define ACE_READ_ATTRIBUTES 0x00000080
+#define ACE_WRITE_ATTRIBUTES 0x00000100
+#define ACE_DELETE 0x00010000
+#define ACE_READ_ACL 0x00020000
+#define ACE_WRITE_ACL 0x00040000
+#define ACE_WRITE_OWNER 0x00080000
+#define ACE_SYNCHRONIZE 0x00100000
-#define ACE_FILE_INHERIT_ACE 0x0001
-#define ACE_DIRECTORY_INHERIT_ACE 0x0002
-#define ACE_NO_PROPAGATE_INHERIT_ACE 0x0004
-#define ACE_INHERIT_ONLY_ACE 0x0008
-#define ACE_SUCCESSFUL_ACCESS_ACE_FLAG 0x0010
-#define ACE_FAILED_ACCESS_ACE_FLAG 0x0020
-#define ACE_IDENTIFIER_GROUP 0x0040
-#define ACE_INHERITED_ACE 0x0080
-#define ACE_OWNER 0x1000
-#define ACE_GROUP 0x2000
-#define ACE_EVERYONE 0x4000
+#define ACE_FILE_INHERIT_ACE 0x0001
+#define ACE_DIRECTORY_INHERIT_ACE 0x0002
+#define ACE_NO_PROPAGATE_INHERIT_ACE 0x0004
+#define ACE_INHERIT_ONLY_ACE 0x0008
+#define ACE_SUCCESSFUL_ACCESS_ACE_FLAG 0x0010
+#define ACE_FAILED_ACCESS_ACE_FLAG 0x0020
+#define ACE_IDENTIFIER_GROUP 0x0040
+#define ACE_INHERITED_ACE 0x0080
+#define ACE_OWNER 0x1000
+#define ACE_GROUP 0x2000
+#define ACE_EVERYONE 0x4000
-#define ACE_ACCESS_ALLOWED_ACE_TYPE 0x0000
-#define ACE_ACCESS_DENIED_ACE_TYPE 0x0001
-#define ACE_SYSTEM_AUDIT_ACE_TYPE 0x0002
-#define ACE_SYSTEM_ALARM_ACE_TYPE 0x0003
+#define ACE_ACCESS_ALLOWED_ACE_TYPE 0x0000
+#define ACE_ACCESS_DENIED_ACE_TYPE 0x0001
+#define ACE_SYSTEM_AUDIT_ACE_TYPE 0x0002
+#define ACE_SYSTEM_ALARM_ACE_TYPE 0x0003
-#define ACL_AUTO_INHERIT 0x0001
-#define ACL_PROTECTED 0x0002
-#define ACL_DEFAULTED 0x0004
-#define ACL_FLAGS_ALL (ACL_AUTO_INHERIT|ACL_PROTECTED|ACL_DEFAULTED)
+#define ACL_AUTO_INHERIT 0x0001
+#define ACL_PROTECTED 0x0002
+#define ACL_DEFAULTED 0x0004
+#define ACL_FLAGS_ALL (ACL_AUTO_INHERIT|ACL_PROTECTED|ACL_DEFAULTED)
-#define ACE_ACCESS_ALLOWED_COMPOUND_ACE_TYPE 0x04
-#define ACE_ACCESS_ALLOWED_OBJECT_ACE_TYPE 0x05
-#define ACE_ACCESS_DENIED_OBJECT_ACE_TYPE 0x06
-#define ACE_SYSTEM_AUDIT_OBJECT_ACE_TYPE 0x07
-#define ACE_SYSTEM_ALARM_OBJECT_ACE_TYPE 0x08
-#define ACE_ACCESS_ALLOWED_CALLBACK_ACE_TYPE 0x09
-#define ACE_ACCESS_DENIED_CALLBACK_ACE_TYPE 0x0A
-#define ACE_ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE 0x0B
-#define ACE_ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE 0x0C
-#define ACE_SYSTEM_AUDIT_CALLBACK_ACE_TYPE 0x0D
-#define ACE_SYSTEM_ALARM_CALLBACK_ACE_TYPE 0x0E
-#define ACE_SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE 0x0F
-#define ACE_SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE 0x10
+#define ACE_ACCESS_ALLOWED_COMPOUND_ACE_TYPE 0x04
+#define ACE_ACCESS_ALLOWED_OBJECT_ACE_TYPE 0x05
+#define ACE_ACCESS_DENIED_OBJECT_ACE_TYPE 0x06
+#define ACE_SYSTEM_AUDIT_OBJECT_ACE_TYPE 0x07
+#define ACE_SYSTEM_ALARM_OBJECT_ACE_TYPE 0x08
+#define ACE_ACCESS_ALLOWED_CALLBACK_ACE_TYPE 0x09
+#define ACE_ACCESS_DENIED_CALLBACK_ACE_TYPE 0x0A
+#define ACE_ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE 0x0B
+#define ACE_ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE 0x0C
+#define ACE_SYSTEM_AUDIT_CALLBACK_ACE_TYPE 0x0D
+#define ACE_SYSTEM_ALARM_CALLBACK_ACE_TYPE 0x0E
+#define ACE_SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE 0x0F
+#define ACE_SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE 0x10
-#define ACE_ALL_TYPES 0x001F
+#define ACE_ALL_TYPES 0x001F
-#define ACE_TYPE_FLAGS (ACE_OWNER|ACE_GROUP|ACE_EVERYONE|ACE_IDENTIFIER_GROUP)
+#define ACE_TYPE_FLAGS (ACE_OWNER|ACE_GROUP|ACE_EVERYONE|ACE_IDENTIFIER_GROUP)
-#define ACE_ALL_PERMS (ACE_READ_DATA|ACE_LIST_DIRECTORY|ACE_WRITE_DATA| \
+/* BEGIN CSTYLED */
+#define ACE_ALL_PERMS (ACE_READ_DATA|ACE_LIST_DIRECTORY|ACE_WRITE_DATA| \
ACE_ADD_FILE|ACE_APPEND_DATA|ACE_ADD_SUBDIRECTORY|ACE_READ_NAMED_ATTRS| \
ACE_WRITE_NAMED_ATTRS|ACE_EXECUTE|ACE_DELETE_CHILD|ACE_READ_ATTRIBUTES| \
ACE_WRITE_ATTRIBUTES|ACE_DELETE|ACE_READ_ACL|ACE_WRITE_ACL| \
ACE_WRITE_OWNER|ACE_SYNCHRONIZE)
+/* END CSTYLED */
-#define VSA_ACE 0x0010
-#define VSA_ACECNT 0x0020
-#define VSA_ACE_ALLTYPES 0x0040
-#define VSA_ACE_ACLFLAGS 0x0080
+#define VSA_ACE 0x0010
+#define VSA_ACECNT 0x0020
+#define VSA_ACE_ALLTYPES 0x0040
+#define VSA_ACE_ACLFLAGS 0x0080
#endif /* _SPL_ACL_H */
\*****************************************************************************/
#ifndef _SPL_ACL_IMPL_H
-#define _SPL_ACL_IMPL_H
+#define _SPL_ACL_IMPL_H
#endif /* _SPL_ACL_IMPL_H */
\*****************************************************************************/
#ifndef _SPL_ATOMIC_H
-#define _SPL_ATOMIC_H
+#define _SPL_ATOMIC_H
#include <linux/module.h>
#include <linux/spinlock.h>
nv = ++(*target);
spin_unlock(&atomic32_lock);
- return nv;
+ return (nv);
}
static __inline__ uint32_t
nv = --(*target);
spin_unlock(&atomic32_lock);
- return nv;
+ return (nv);
}
static __inline__ uint32_t
nv = *target;
spin_unlock(&atomic32_lock);
- return nv;
+ return (nv);
}
static __inline__ uint32_t
nv = *target;
spin_unlock(&atomic32_lock);
- return nv;
+ return (nv);
}
static __inline__ uint32_t
-atomic_cas_32(volatile uint32_t *target, uint32_t cmp,
- uint32_t newval)
+atomic_cas_32(volatile uint32_t *target, uint32_t cmp, uint32_t newval)
{
uint32_t rc;
spin_unlock(&atomic32_lock);
- return rc;
+ return (rc);
}
static __inline__ uint32_t
*target = newval;
spin_unlock(&atomic32_lock);
- return rc;
+ return (rc);
}
static __inline__ void
nv = ++(*target);
spin_unlock(&atomic64_lock);
- return nv;
+ return (nv);
}
static __inline__ uint64_t
nv = --(*target);
spin_unlock(&atomic64_lock);
- return nv;
+ return (nv);
}
static __inline__ uint64_t
nv = *target;
spin_unlock(&atomic64_lock);
- return nv;
+ return (nv);
}
static __inline__ uint64_t
nv = *target;
spin_unlock(&atomic64_lock);
- return nv;
+ return (nv);
}
static __inline__ uint64_t
-atomic_cas_64(volatile uint64_t *target, uint64_t cmp,
- uint64_t newval)
+atomic_cas_64(volatile uint64_t *target, uint64_t cmp, uint64_t newval)
{
uint64_t rc;
*target = newval;
spin_unlock(&atomic64_lock);
- return rc;
+ return (rc);
}
static __inline__ uint64_t
*target = newval;
spin_unlock(&atomic64_lock);
- return rc;
+ return (rc);
}
#else /* ATOMIC_SPINLOCK */
-#define atomic_inc_32(v) atomic_inc((atomic_t *)(v))
-#define atomic_dec_32(v) atomic_dec((atomic_t *)(v))
-#define atomic_add_32(v, i) atomic_add((i), (atomic_t *)(v))
-#define atomic_sub_32(v, i) atomic_sub((i), (atomic_t *)(v))
-#define atomic_inc_32_nv(v) atomic_inc_return((atomic_t *)(v))
-#define atomic_dec_32_nv(v) atomic_dec_return((atomic_t *)(v))
-#define atomic_add_32_nv(v, i) atomic_add_return((i), (atomic_t *)(v))
-#define atomic_sub_32_nv(v, i) atomic_sub_return((i), (atomic_t *)(v))
-#define atomic_cas_32(v, x, y) atomic_cmpxchg((atomic_t *)(v), x, y)
-#define atomic_swap_32(v, x) atomic_xchg((atomic_t *)(v), x)
-#define atomic_inc_64(v) atomic64_inc((atomic64_t *)(v))
-#define atomic_dec_64(v) atomic64_dec((atomic64_t *)(v))
-#define atomic_add_64(v, i) atomic64_add((i), (atomic64_t *)(v))
-#define atomic_sub_64(v, i) atomic64_sub((i), (atomic64_t *)(v))
-#define atomic_inc_64_nv(v) atomic64_inc_return((atomic64_t *)(v))
-#define atomic_dec_64_nv(v) atomic64_dec_return((atomic64_t *)(v))
-#define atomic_add_64_nv(v, i) atomic64_add_return((i), (atomic64_t *)(v))
-#define atomic_sub_64_nv(v, i) atomic64_sub_return((i), (atomic64_t *)(v))
-#define atomic_cas_64(v, x, y) atomic64_cmpxchg((atomic64_t *)(v), x, y)
-#define atomic_swap_64(v, x) atomic64_xchg((atomic64_t *)(v), x)
+#define atomic_inc_32(v) atomic_inc((atomic_t *)(v))
+#define atomic_dec_32(v) atomic_dec((atomic_t *)(v))
+#define atomic_add_32(v, i) atomic_add((i), (atomic_t *)(v))
+#define atomic_sub_32(v, i) atomic_sub((i), (atomic_t *)(v))
+#define atomic_inc_32_nv(v) atomic_inc_return((atomic_t *)(v))
+#define atomic_dec_32_nv(v) atomic_dec_return((atomic_t *)(v))
+#define atomic_add_32_nv(v, i) atomic_add_return((i), (atomic_t *)(v))
+#define atomic_sub_32_nv(v, i) atomic_sub_return((i), (atomic_t *)(v))
+#define atomic_cas_32(v, x, y) atomic_cmpxchg((atomic_t *)(v), x, y)
+#define atomic_swap_32(v, x) atomic_xchg((atomic_t *)(v), x)
+#define atomic_inc_64(v) atomic64_inc((atomic64_t *)(v))
+#define atomic_dec_64(v) atomic64_dec((atomic64_t *)(v))
+#define atomic_add_64(v, i) atomic64_add((i), (atomic64_t *)(v))
+#define atomic_sub_64(v, i) atomic64_sub((i), (atomic64_t *)(v))
+#define atomic_inc_64_nv(v) atomic64_inc_return((atomic64_t *)(v))
+#define atomic_dec_64_nv(v) atomic64_dec_return((atomic64_t *)(v))
+#define atomic_add_64_nv(v, i) atomic64_add_return((i), (atomic64_t *)(v))
+#define atomic_sub_64_nv(v, i) atomic64_sub_return((i), (atomic64_t *)(v))
+#define atomic_cas_64(v, x, y) atomic64_cmpxchg((atomic64_t *)(v), x, y)
+#define atomic_swap_64(v, x) atomic64_xchg((atomic64_t *)(v), x)
#endif /* ATOMIC_SPINLOCK */
static __inline__ void *
atomic_cas_ptr(volatile void *target, void *cmp, void *newval)
{
- return (void *)atomic_cas_64((volatile uint64_t *)target,
- (uint64_t)cmp, (uint64_t)newval);
+ return ((void *)atomic_cas_64((volatile uint64_t *)target,
+ (uint64_t)cmp, (uint64_t)newval));
}
#else /* _LP64 */
static __inline__ void *
atomic_cas_ptr(volatile void *target, void *cmp, void *newval)
{
- return (void *)atomic_cas_32((volatile uint32_t *)target,
- (uint32_t)cmp, (uint32_t)newval);
+ return ((void *)atomic_cas_32((volatile uint32_t *)target,
+ (uint32_t)cmp, (uint32_t)newval));
}
#endif /* _LP64 */
\*****************************************************************************/
#ifndef _SPL_ATTR_H
-#define _SPL_ATTR_H
+#define _SPL_ATTR_H
#endif /* SPL_ATTR_H */
\*****************************************************************************/
#ifndef _SPL_BITMAP_H
-#define _SPL_BITMAP_H
+#define _SPL_BITMAP_H
#endif /* SPL_BITMAP_H */
\*****************************************************************************/
#ifndef _SPL_BOOTCONF_H
-#define _SPL_BOOTCONF_H
+#define _SPL_BOOTCONF_H
#endif /* SPL_BOOTCONF_H */
\*****************************************************************************/
#ifndef _SPL_BOOTPROPS_H
-#define _SPL_BOOTPROPS_H
+#define _SPL_BOOTPROPS_H
#endif /* SPL_BOOTPROPS_H */
\*****************************************************************************/
#ifndef _SPL_BUF_H
-#define _SPL_BUF_H
+#define _SPL_BUF_H
#endif /* SPL_BUF_H */
\*****************************************************************************/
#ifndef _SPL_BYTEORDER_H
-#define _SPL_BYTEORDER_H
+#define _SPL_BYTEORDER_H
#include <asm/byteorder.h>
#include <sys/isa_defs.h>
-#define LE_16(x) cpu_to_le16(x)
-#define LE_32(x) cpu_to_le32(x)
-#define LE_64(x) cpu_to_le64(x)
-#define BE_16(x) cpu_to_be16(x)
-#define BE_32(x) cpu_to_be32(x)
-#define BE_64(x) cpu_to_be64(x)
+#define LE_16(x) cpu_to_le16(x)
+#define LE_32(x) cpu_to_le32(x)
+#define LE_64(x) cpu_to_le64(x)
+#define BE_16(x) cpu_to_be16(x)
+#define BE_32(x) cpu_to_be32(x)
+#define BE_64(x) cpu_to_be64(x)
-#define BE_IN8(xa) \
+#define BE_IN8(xa) \
*((uint8_t *)(xa))
-#define BE_IN16(xa) \
+#define BE_IN16(xa) \
(((uint16_t)BE_IN8(xa) << 8) | BE_IN8((uint8_t *)(xa)+1))
-#define BE_IN32(xa) \
+#define BE_IN32(xa) \
(((uint32_t)BE_IN16(xa) << 16) | BE_IN16((uint8_t *)(xa)+2))
#ifdef _BIG_ENDIAN
static __inline__ uint64_t
-htonll(uint64_t n) {
+htonll(uint64_t n)
+{
return (n);
}
static __inline__ uint64_t
-ntohll(uint64_t n) {
+ntohll(uint64_t n)
+{
return (n);
}
#else
static __inline__ uint64_t
-htonll(uint64_t n) {
+htonll(uint64_t n)
+{
return ((((uint64_t)htonl(n)) << 32) + htonl(n >> 32));
}
static __inline__ uint64_t
-ntohll(uint64_t n) {
+ntohll(uint64_t n)
+{
return ((((uint64_t)ntohl(n)) << 32) + ntohl(n >> 32));
}
#endif
\*****************************************************************************/
#ifndef _SPL_CALLB_H
-#define _SPL_CALLB_H
+#define _SPL_CALLB_H
#include <linux/module.h>
#include <sys/mutex.h>
-#define CALLB_CPR_ASSERT(cp) ASSERT(MUTEX_HELD((cp)->cc_lockp));
+#define CALLB_CPR_ASSERT(cp) ASSERT(MUTEX_HELD((cp)->cc_lockp));
typedef struct callb_cpr {
- kmutex_t *cc_lockp;
+ kmutex_t *cc_lockp;
} callb_cpr_t;
-#define CALLB_CPR_INIT(cp, lockp, func, name) { \
- (cp)->cc_lockp = lockp; \
+#define CALLB_CPR_INIT(cp, lockp, func, name) { \
+ (cp)->cc_lockp = lockp; \
}
-#define CALLB_CPR_SAFE_BEGIN(cp) { \
+#define CALLB_CPR_SAFE_BEGIN(cp) { \
CALLB_CPR_ASSERT(cp); \
}
-#define CALLB_CPR_SAFE_END(cp, lockp) { \
+#define CALLB_CPR_SAFE_END(cp, lockp) { \
CALLB_CPR_ASSERT(cp); \
}
-#define CALLB_CPR_EXIT(cp) { \
- ASSERT(MUTEX_HELD((cp)->cc_lockp)); \
- mutex_exit((cp)->cc_lockp); \
+#define CALLB_CPR_EXIT(cp) { \
+ ASSERT(MUTEX_HELD((cp)->cc_lockp)); \
+ mutex_exit((cp)->cc_lockp); \
}
#endif /* _SPL_CALLB_H */
-
\*****************************************************************************/
#ifndef _SPL_CALLO_H
-#define _SPL_CALLO_H
+#define _SPL_CALLO_H
/*
* Callout flags:
* Legacy interfaces timeout() and realtime_timeout() pass this flag
* to timeout_generic() to indicate that a 32-bit ID should be allocated.
*/
-#define CALLOUT_FLAG_ROUNDUP 0x1
-#define CALLOUT_FLAG_ABSOLUTE 0x2
-#define CALLOUT_FLAG_HRESTIME 0x4
-#define CALLOUT_FLAG_32BIT 0x8
+#define CALLOUT_FLAG_ROUNDUP 0x1
+#define CALLOUT_FLAG_ABSOLUTE 0x2
+#define CALLOUT_FLAG_HRESTIME 0x4
+#define CALLOUT_FLAG_32BIT 0x8
#endif /* _SPL_CALLB_H */
\*****************************************************************************/
#ifndef _SPL_CMN_ERR_H
-#define _SPL_CMN_ERR_H
+#define _SPL_CMN_ERR_H
#include <sys/varargs.h>
-#define CE_CONT 0 /* continuation */
-#define CE_NOTE 1 /* notice */
-#define CE_WARN 2 /* warning */
-#define CE_PANIC 3 /* panic */
-#define CE_IGNORE 4 /* print nothing */
+#define CE_CONT 0 /* continuation */
+#define CE_NOTE 1 /* notice */
+#define CE_WARN 2 /* warning */
+#define CE_PANIC 3 /* panic */
+#define CE_IGNORE 4 /* print nothing */
extern void cmn_err(int, const char *, ...);
extern void vcmn_err(int, const char *, __va_list);
extern void vpanic(const char *, __va_list);
-#define fm_panic panic
+#define fm_panic panic
#endif /* SPL_CMN_ERR_H */
\*****************************************************************************/
#ifndef _SPL_COMPRESS_H
-#define _SPL_COMPRESS_H
+#define _SPL_COMPRESS_H
#endif /* SPL_COMPRESS_H */
extern void __cv_wait_io(kcondvar_t *, kmutex_t *);
extern void __cv_wait_sig(kcondvar_t *, kmutex_t *);
extern clock_t __cv_timedwait(kcondvar_t *, kmutex_t *, clock_t);
+extern clock_t __cv_timedwait_io(kcondvar_t *, kmutex_t *, clock_t);
extern clock_t __cv_timedwait_sig(kcondvar_t *, kmutex_t *, clock_t);
extern clock_t cv_timedwait_hires(kcondvar_t *, kmutex_t *, hrtime_t,
hrtime_t res, int flag);
#define cv_wait_sig(cvp, mp) __cv_wait_sig(cvp, mp)
#define cv_wait_interruptible(cvp, mp) cv_wait_sig(cvp, mp)
#define cv_timedwait(cvp, mp, t) __cv_timedwait(cvp, mp, t)
+#define cv_timedwait_io(cvp, mp, t) __cv_timedwait_io(cvp, mp, t)
#define cv_timedwait_sig(cvp, mp, t) __cv_timedwait_sig(cvp, mp, t)
#define cv_timedwait_interruptible(cvp, mp, t) cv_timedwait_sig(cvp, mp, t)
#define cv_signal(cvp) __cv_signal(cvp)
\*****************************************************************************/
#ifndef _SPL_CONF_H
-#define _SPL_CONF_H
+#define _SPL_CONF_H
#endif /* SPL_CONF_H */
void
console_vprintf(const char *fmt, va_list args)
{
- vprintk(fmt, args);
+ vprintk(fmt, args);
}
void
console_printf(const char *fmt, ...)
{
- va_list args;
+ va_list args;
- va_start(args, fmt);
- console_vprintf(fmt, args);
- va_end(args);
+ va_start(args, fmt);
+ console_vprintf(fmt, args);
+ va_end(args);
}
#endif /* _SPL_CONSOLE_H */
\*****************************************************************************/
#ifndef _SPL_CPUPART_H
-#define _SPL_CPUPART_H
+#define _SPL_CPUPART_H
#endif /* SPL_CPUPART_H */
\*****************************************************************************/
#ifndef _SPL_CPUVAR_H
-#define _SPL_CPUVAR_H
+#define _SPL_CPUVAR_H
#endif /* SPL_CPUVAR_H */
\*****************************************************************************/
#ifndef _SPL_CRC32_H
-#define _SPL_CRC32_H
+#define _SPL_CRC32_H
#endif /* SPL_CRC32_H */
\*****************************************************************************/
#ifndef _SPL_CRED_H
-#define _SPL_CRED_H
+#define _SPL_CRED_H
#include <linux/module.h>
#include <sys/types.h>
extern gid_t crgetsgid(const cred_t *cr);
extern gid_t crgetfsgid(const cred_t *cr);
extern int crgetngroups(const cred_t *cr);
-extern gid_t * crgetgroups(const cred_t *cr);
+extern gid_t *crgetgroups(const cred_t *cr);
extern int groupmember(gid_t gid, const cred_t *cr);
#endif /* _SPL_CRED_H */
\*****************************************************************************/
#ifndef _SPL_CTYPE_H
-#define _SPL_CTYPE_H
+#define _SPL_CTYPE_H
#include <linux/ctype.h>
\*****************************************************************************/
#ifndef _SPL_DDI_H
-#define _SPL_DDI_H
+#define _SPL_DDI_H
#endif /* SPL_DDI_H */
const char *fmt, ...);
void spl_dumpstack(void);
+/* BEGIN CSTYLED */
#define PANIC(fmt, a...) \
spl_panic(__FILE__, __FUNCTION__, __LINE__, fmt, ## a)
#define VERIFY(cond) \
- (void)(unlikely(!(cond)) && \
+ (void) (unlikely(!(cond)) && \
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
"%s", "VERIFY(" #cond ") failed\n"))
-#define VERIFY3_IMPL(LEFT, OP, RIGHT, TYPE, FMT, CAST) \
- (void)((!((TYPE)(LEFT) OP (TYPE)(RIGHT))) && \
- spl_panic(__FILE__, __FUNCTION__, __LINE__, \
- "VERIFY3(" #LEFT " " #OP " " #RIGHT ") " \
- "failed (" FMT " " #OP " " FMT ")\n", \
- CAST (LEFT), CAST (RIGHT)))
+#define VERIFY3_IMPL(LEFT, OP, RIGHT, TYPE, FMT, CAST) do { \
+ TYPE _verify3_left = (TYPE)(LEFT); \
+ TYPE _verify3_right = (TYPE)(RIGHT); \
+ if (!(_verify3_left OP _verify3_right)) \
+ spl_panic(__FILE__, __FUNCTION__, __LINE__, \
+ "VERIFY3(" #LEFT " " #OP " " #RIGHT ") " \
+ "failed (" FMT " " #OP " " FMT ")\n", \
+ CAST (_verify3_left), CAST (_verify3_right)); \
+ } while (0)
#define VERIFY3B(x,y,z) VERIFY3_IMPL(x, y, z, boolean_t, "%d", (boolean_t))
#define VERIFY3S(x,y,z) VERIFY3_IMPL(x, y, z, int64_t, "%lld", (long long))
((void)((!!(A) == !!(B)) || \
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
"(" #A ") is equivalent to (" #B ")")))
+/* END CSTYLED */
#endif /* NDEBUG */
\*****************************************************************************/
#ifndef _SPL_DIRENT_H
-#define _SPL_DIRENT_H
+#define _SPL_DIRENT_H
#endif /* SPL_DIRENT_H */
\*****************************************************************************/
#ifndef _SPL_DISP_H
-#define _SPL_DISP_H
+#define _SPL_DISP_H
#include <linux/preempt.h>
}
static inline dkioc_free_list_t *dfl_alloc(uint64_t dfl_num_exts, int flags) {
- return vmem_zalloc(DFL_SZ(dfl_num_exts), flags);
+ return (vmem_zalloc(DFL_SZ(dfl_num_exts), flags));
}
#endif /* _SPL_DKIOC_UTIL_H */
\*****************************************************************************/
#ifndef _SPL_DNLC_H
-#define _SPL_DNLC_H
+#define _SPL_DNLC_H
#endif /* SPL_DNLC_H */
\*****************************************************************************/
#ifndef _SPL_DUMPHDR_H
-#define _SPL_DUMPHDR_H
+#define _SPL_DUMPHDR_H
#endif /* SPL_DUMPHDR_H */
\*****************************************************************************/
#ifndef _SPL_EFI_PARTITION_H
-#define _SPL_EFI_PARTITION_H
+#define _SPL_EFI_PARTITION_H
#endif /* SPL_EFI_PARTITION_H */
\*****************************************************************************/
#ifndef _SPL_ERRNO_H
-#define _SPL_ERRNO_H
+#define _SPL_ERRNO_H
#endif /* SPL_ERRNO_H */
\*****************************************************************************/
#ifndef _SPL_FCNTL_H
-#define _SPL_FCNTL_H
+#define _SPL_FCNTL_H
#include <asm/fcntl.h>
-#define F_FREESP 11
+#define F_FREESP 11
#ifdef CONFIG_64BIT
typedef struct flock flock64_t;
\*****************************************************************************/
#ifndef _SPL_FILE_H
-#define _SPL_FILE_H
+#define _SPL_FILE_H
#define FIGNORECASE 0x00080000
#define FKIOCTL 0x80000000
DIST_COMMON = $(am__kernel_HEADERS_DIST) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/kernel-ctl-table-name.m4 \
+ $(top_srcdir)/config/kernel-fallocate.m4 \
+ $(top_srcdir)/config/kernel-group-info.m4 \
+ $(top_srcdir)/config/kernel-inode-lock.m4 \
+ $(top_srcdir)/config/kernel-kmem-cache.m4 \
+ $(top_srcdir)/config/kernel-kuidgid.m4 \
+ $(top_srcdir)/config/kernel-pde-data.m4 \
+ $(top_srcdir)/config/kernel-rw.m4 \
+ $(top_srcdir)/config/kernel-rwsem.m4 \
+ $(top_srcdir)/config/kernel-sched.m4 \
+ $(top_srcdir)/config/kernel-set-fs-pwd.m4 \
+ $(top_srcdir)/config/kernel-shrinker.m4 \
+ $(top_srcdir)/config/kernel-spinlock.m4 \
+ $(top_srcdir)/config/kernel-timer.m4 \
+ $(top_srcdir)/config/kernel-trim-unused-symbols.m4 \
+ $(top_srcdir)/config/kernel-truncate-range.m4 \
+ $(top_srcdir)/config/kernel-urange-sleep.m4 \
+ $(top_srcdir)/config/kernel-vfs-fsync.m4 \
+ $(top_srcdir)/config/kernel-vfs-getattr.m4 \
+ $(top_srcdir)/config/kernel-wait.m4 \
+ $(top_srcdir)/config/kernel-zlib.m4 \
+ $(top_srcdir)/config/libtool.m4 \
$(top_srcdir)/config/ltoptions.m4 \
$(top_srcdir)/config/ltsugar.m4 \
$(top_srcdir)/config/ltversion.m4 \
DIST_COMMON = $(am__kernel_HEADERS_DIST) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/kernel-ctl-table-name.m4 \
+ $(top_srcdir)/config/kernel-fallocate.m4 \
+ $(top_srcdir)/config/kernel-group-info.m4 \
+ $(top_srcdir)/config/kernel-inode-lock.m4 \
+ $(top_srcdir)/config/kernel-kmem-cache.m4 \
+ $(top_srcdir)/config/kernel-kuidgid.m4 \
+ $(top_srcdir)/config/kernel-pde-data.m4 \
+ $(top_srcdir)/config/kernel-rw.m4 \
+ $(top_srcdir)/config/kernel-rwsem.m4 \
+ $(top_srcdir)/config/kernel-sched.m4 \
+ $(top_srcdir)/config/kernel-set-fs-pwd.m4 \
+ $(top_srcdir)/config/kernel-shrinker.m4 \
+ $(top_srcdir)/config/kernel-spinlock.m4 \
+ $(top_srcdir)/config/kernel-timer.m4 \
+ $(top_srcdir)/config/kernel-trim-unused-symbols.m4 \
+ $(top_srcdir)/config/kernel-truncate-range.m4 \
+ $(top_srcdir)/config/kernel-urange-sleep.m4 \
+ $(top_srcdir)/config/kernel-vfs-fsync.m4 \
+ $(top_srcdir)/config/kernel-vfs-getattr.m4 \
+ $(top_srcdir)/config/kernel-wait.m4 \
+ $(top_srcdir)/config/kernel-zlib.m4 \
+ $(top_srcdir)/config/libtool.m4 \
$(top_srcdir)/config/ltoptions.m4 \
$(top_srcdir)/config/ltsugar.m4 \
$(top_srcdir)/config/ltversion.m4 \
\*****************************************************************************/
#ifndef _SPL_SWAPNODE_H
-#define _SPL_SWAPNODE_H
+#define _SPL_SWAPNODE_H
#endif /* SPL_SWAPNODE_H */
\*****************************************************************************/
#ifndef _SPL_IDMAP_H
-#define _SPL_IDMAP_H
+#define _SPL_IDMAP_H
-#define IDMAP_WK_CREATOR_OWNER_UID 2147483648U
+#define IDMAP_WK_CREATOR_OWNER_UID 2147483648U
#endif /* SPL_IDMAP_H */
\*****************************************************************************/
#ifndef _SPL_INT_LIMITS_H
-#define _SPL_INT_LIMITS_H
+#define _SPL_INT_LIMITS_H
#endif /* SPL_INT_LIMITS_H */
\*****************************************************************************/
#ifndef _SPL_INT_TYPES_H
-#define _SPL_INT_TYPES_H
+#define _SPL_INT_TYPES_H
#include <sys/inttypes.h>
\*****************************************************************************/
#ifndef _SPL_INTTYPES_H
-#define _SPL_INTTYPES_H
+#define _SPL_INTTYPES_H
#endif /* SPL_INTTYPES_H */
#if defined(__x86_64) || defined(__x86_64__)
#if !defined(__x86_64)
-#define __x86_64
+#define __x86_64
#endif
#if !defined(__amd64)
-#define __amd64
+#define __amd64
#endif
#if !defined(__x86)
-#define __x86
+#define __x86
#endif
#if !defined(_LP64)
-#define _LP64
+#define _LP64
#endif
-#define _ALIGNMENT_REQUIRED 1
+#define _ALIGNMENT_REQUIRED 1
/* i386 arch specific defines */
#elif defined(__i386) || defined(__i386__)
#if !defined(__i386)
-#define __i386
+#define __i386
#endif
#if !defined(__x86)
-#define __x86
+#define __x86
#endif
#if !defined(_ILP32)
-#define _ILP32
+#define _ILP32
#endif
-#define _ALIGNMENT_REQUIRED 0
+#define _ALIGNMENT_REQUIRED 0
/* powerpc (ppc64) arch specific defines */
#elif defined(__powerpc) || defined(__powerpc__) || defined(__powerpc64__)
#if !defined(__powerpc)
-#define __powerpc
+#define __powerpc
#endif
#if !defined(__powerpc__)
-#define __powerpc__
+#define __powerpc__
#endif
#if defined(__powerpc64__)
#if !defined(_LP64)
-#define _LP64
+#define _LP64
#endif
#else
#if !defined(_ILP32)
-#define _ILP32
+#define _ILP32
#endif
#endif
* Illumos doesn't define _ALIGNMENT_REQUIRED for PPC, so default to 1
* out of paranoia.
*/
-#define _ALIGNMENT_REQUIRED 1
+#define _ALIGNMENT_REQUIRED 1
/* arm arch specific defines */
#elif defined(__arm) || defined(__arm__) || defined(__aarch64__)
#if !defined(__arm)
-#define __arm
+#define __arm
#endif
#if !defined(__arm__)
-#define __arm__
+#define __arm__
#endif
#if defined(__aarch64__)
#if !defined(_LP64)
-#define _LP64
+#define _LP64
#endif
#else
#if !defined(_ILP32)
-#define _ILP32
+#define _ILP32
#endif
#endif
#if defined(__ARMEL__) || defined(__AARCH64EL__)
-#define _LITTLE_ENDIAN
+#define _LITTLE_ENDIAN
#else
-#define _BIG_ENDIAN
+#define _BIG_ENDIAN
#endif
/*
* Illumos doesn't define _ALIGNMENT_REQUIRED for ARM, so default to 1
* out of paranoia.
*/
-#define _ALIGNMENT_REQUIRED 1
+#define _ALIGNMENT_REQUIRED 1
/* sparc arch specific defines */
#elif defined(__sparc) || defined(__sparc__)
#if !defined(__sparc)
-#define __sparc
+#define __sparc
#endif
#if !defined(__sparc__)
-#define __sparc__
+#define __sparc__
#endif
#if defined(__arch64__)
#if !defined(_LP64)
-#define _LP64
+#define _LP64
#endif
#else
#if !defined(_ILP32)
-#define _ILP32
+#define _ILP32
#endif
#endif
-#define _BIG_ENDIAN
-#define _SUNOS_VTOC_16
-#define _ALIGNMENT_REQUIRED 1
+#define _BIG_ENDIAN
+#define _SUNOS_VTOC_16
+#define _ALIGNMENT_REQUIRED 1
/* s390 arch specific defines */
#elif defined(__s390__)
* Illumos doesn't define _ALIGNMENT_REQUIRED for s390, so default to 1
* out of paranoia.
*/
-#define _ALIGNMENT_REQUIRED 1
+#define _ALIGNMENT_REQUIRED 1
/* MIPS arch specific defines */
#elif defined(__mips__)
* Illumos doesn't define _ALIGNMENT_REQUIRED for MIPS, so default to 1
* out of paranoia.
*/
-#define _ALIGNMENT_REQUIRED 1
+#define _ALIGNMENT_REQUIRED 1
#else
/*
#include <sys/byteorder.h>
#if defined(__LITTLE_ENDIAN) && !defined(_LITTLE_ENDIAN)
-#define _LITTLE_ENDIAN __LITTLE_ENDIAN
+#define _LITTLE_ENDIAN __LITTLE_ENDIAN
#endif
#if defined(__BIG_ENDIAN) && !defined(_BIG_ENDIAN)
-#define _BIG_ENDIAN __BIG_ENDIAN
+#define _BIG_ENDIAN __BIG_ENDIAN
#endif
#if defined(_LITTLE_ENDIAN) && defined(_BIG_ENDIAN)
\*****************************************************************************/
#ifndef _SPL_KIDMAP_H
-#define _SPL_KIDMAP_H
+#define _SPL_KIDMAP_H
#include <sys/idmap.h>
\*****************************************************************************/
#ifndef _SPL_KOBJ_H
-#define _SPL_KOBJ_H
+#define _SPL_KOBJ_H
#include <sys/vnode.h>
\*****************************************************************************/
#ifndef _SPL_KSTAT_H
-#define _SPL_KSTAT_H
+#define _SPL_KSTAT_H
#include <linux/module.h>
#include <linux/proc_compat.h>
#include <sys/kmem.h>
#include <sys/mutex.h>
-#define KSTAT_STRLEN 31
-#define KSTAT_RAW_MAX (128*1024)
+#define KSTAT_STRLEN 255
+#define KSTAT_RAW_MAX (128*1024)
-/* For reference valid classes are:
+/*
+ * For reference valid classes are:
* disk, tape, net, controller, vm, kvm, hat, streams, kstat, misc
*/
-#define KSTAT_TYPE_RAW 0 /* can be anything; ks_ndata >= 1 */
-#define KSTAT_TYPE_NAMED 1 /* name/value pair; ks_ndata >= 1 */
-#define KSTAT_TYPE_INTR 2 /* interrupt stats; ks_ndata == 1 */
-#define KSTAT_TYPE_IO 3 /* I/O stats; ks_ndata == 1 */
-#define KSTAT_TYPE_TIMER 4 /* event timer; ks_ndata >= 1 */
-#define KSTAT_NUM_TYPES 5
-
-#define KSTAT_DATA_CHAR 0
-#define KSTAT_DATA_INT32 1
-#define KSTAT_DATA_UINT32 2
-#define KSTAT_DATA_INT64 3
-#define KSTAT_DATA_UINT64 4
-#define KSTAT_DATA_LONG 5
-#define KSTAT_DATA_ULONG 6
-#define KSTAT_DATA_STRING 7
-#define KSTAT_NUM_DATAS 8
-
-#define KSTAT_INTR_HARD 0
-#define KSTAT_INTR_SOFT 1
-#define KSTAT_INTR_WATCHDOG 2
-#define KSTAT_INTR_SPURIOUS 3
-#define KSTAT_INTR_MULTSVC 4
-#define KSTAT_NUM_INTRS 5
-
-#define KSTAT_FLAG_VIRTUAL 0x01
-#define KSTAT_FLAG_VAR_SIZE 0x02
-#define KSTAT_FLAG_WRITABLE 0x04
-#define KSTAT_FLAG_PERSISTENT 0x08
-#define KSTAT_FLAG_DORMANT 0x10
-#define KSTAT_FLAG_UNSUPPORTED (KSTAT_FLAG_VAR_SIZE | KSTAT_FLAG_WRITABLE | \
- KSTAT_FLAG_PERSISTENT | KSTAT_FLAG_DORMANT)
-
-
-#define KS_MAGIC 0x9d9d9d9d
+#define KSTAT_TYPE_RAW 0 /* can be anything; ks_ndata >= 1 */
+#define KSTAT_TYPE_NAMED 1 /* name/value pair; ks_ndata >= 1 */
+#define KSTAT_TYPE_INTR 2 /* interrupt stats; ks_ndata == 1 */
+#define KSTAT_TYPE_IO 3 /* I/O stats; ks_ndata == 1 */
+#define KSTAT_TYPE_TIMER 4 /* event timer; ks_ndata >= 1 */
+#define KSTAT_NUM_TYPES 5
+
+#define KSTAT_DATA_CHAR 0
+#define KSTAT_DATA_INT32 1
+#define KSTAT_DATA_UINT32 2
+#define KSTAT_DATA_INT64 3
+#define KSTAT_DATA_UINT64 4
+#define KSTAT_DATA_LONG 5
+#define KSTAT_DATA_ULONG 6
+#define KSTAT_DATA_STRING 7
+#define KSTAT_NUM_DATAS 8
+
+#define KSTAT_INTR_HARD 0
+#define KSTAT_INTR_SOFT 1
+#define KSTAT_INTR_WATCHDOG 2
+#define KSTAT_INTR_SPURIOUS 3
+#define KSTAT_INTR_MULTSVC 4
+#define KSTAT_NUM_INTRS 5
+
+#define KSTAT_FLAG_VIRTUAL 0x01
+#define KSTAT_FLAG_VAR_SIZE 0x02
+#define KSTAT_FLAG_WRITABLE 0x04
+#define KSTAT_FLAG_PERSISTENT 0x08
+#define KSTAT_FLAG_DORMANT 0x10
+#define KSTAT_FLAG_UNSUPPORTED \
+ (KSTAT_FLAG_VAR_SIZE | KSTAT_FLAG_WRITABLE | \
+ KSTAT_FLAG_PERSISTENT | KSTAT_FLAG_DORMANT)
+
+
+#define KS_MAGIC 0x9d9d9d9d
/* Dynamic updates */
-#define KSTAT_READ 0
-#define KSTAT_WRITE 1
+#define KSTAT_READ 0
+#define KSTAT_WRITE 1
struct kstat_s;
typedef struct kstat_s kstat_t;
-typedef int kid_t; /* unique kstat id */
-typedef int kstat_update_t(struct kstat_s *, int); /* dynamic update cb */
+typedef int kid_t; /* unique kstat id */
+typedef int kstat_update_t(struct kstat_s *, int); /* dynamic update cb */
typedef struct kstat_module {
- char ksm_name[KSTAT_STRLEN+1]; /* module name */
- struct list_head ksm_module_list; /* module linkage */
- struct list_head ksm_kstat_list; /* list of kstat entries */
- struct proc_dir_entry *ksm_proc; /* proc entry */
+ char ksm_name[KSTAT_STRLEN+1]; /* module name */
+ struct list_head ksm_module_list; /* module linkage */
+ struct list_head ksm_kstat_list; /* list of kstat entries */
+ struct proc_dir_entry *ksm_proc; /* proc entry */
} kstat_module_t;
typedef struct kstat_raw_ops {
} kstat_raw_ops_t;
struct kstat_s {
- int ks_magic; /* magic value */
- kid_t ks_kid; /* unique kstat ID */
- hrtime_t ks_crtime; /* creation time */
- hrtime_t ks_snaptime; /* last access time */
- char ks_module[KSTAT_STRLEN+1]; /* provider module name */
- int ks_instance; /* provider module instance */
- char ks_name[KSTAT_STRLEN+1]; /* kstat name */
- char ks_class[KSTAT_STRLEN+1]; /* kstat class */
- uchar_t ks_type; /* kstat data type */
- uchar_t ks_flags; /* kstat flags */
- void *ks_data; /* kstat type-specific data */
- uint_t ks_ndata; /* # of type-specific data records */
- size_t ks_data_size; /* size of kstat data section */
- struct proc_dir_entry *ks_proc; /* proc linkage */
- kstat_update_t *ks_update; /* dynamic updates */
- void *ks_private; /* private data */
- kmutex_t ks_private_lock; /* kstat private data lock */
- kmutex_t *ks_lock; /* kstat data lock */
- struct list_head ks_list; /* kstat linkage */
- kstat_module_t *ks_owner; /* kstat module linkage */
- kstat_raw_ops_t ks_raw_ops; /* ops table for raw type */
- char *ks_raw_buf; /* buf used for raw ops */
- size_t ks_raw_bufsize; /* size of raw ops buffer */
+ int ks_magic; /* magic value */
+ kid_t ks_kid; /* unique kstat ID */
+ hrtime_t ks_crtime; /* creation time */
+ hrtime_t ks_snaptime; /* last access time */
+ char ks_module[KSTAT_STRLEN+1]; /* provider module name */
+ int ks_instance; /* provider module instance */
+ char ks_name[KSTAT_STRLEN+1]; /* kstat name */
+ char ks_class[KSTAT_STRLEN+1]; /* kstat class */
+ uchar_t ks_type; /* kstat data type */
+ uchar_t ks_flags; /* kstat flags */
+ void *ks_data; /* kstat type-specific data */
+ uint_t ks_ndata; /* # of data records */
+ size_t ks_data_size; /* size of kstat data section */
+ struct proc_dir_entry *ks_proc; /* proc linkage */
+ kstat_update_t *ks_update; /* dynamic updates */
+ void *ks_private; /* private data */
+ kmutex_t ks_private_lock; /* kstat private data lock */
+ kmutex_t *ks_lock; /* kstat data lock */
+ struct list_head ks_list; /* kstat linkage */
+ kstat_module_t *ks_owner; /* kstat module linkage */
+ kstat_raw_ops_t ks_raw_ops; /* ops table for raw type */
+ char *ks_raw_buf; /* buf used for raw ops */
+ size_t ks_raw_bufsize; /* size of raw ops buffer */
};
typedef struct kstat_named_s {
- char name[KSTAT_STRLEN]; /* name of counter */
- uchar_t data_type; /* data type */
- union {
- char c[16]; /* 128-bit int */
- int32_t i32; /* 32-bit signed int */
- uint32_t ui32; /* 32-bit unsigned int */
- int64_t i64; /* 64-bit signed int */
- uint64_t ui64; /* 64-bit unsigned int */
- long l; /* native signed long */
- ulong_t ul; /* native unsigned long */
- struct {
- union {
- char *ptr; /* NULL-term string */
- char __pad[8]; /* 64-bit padding */
- } addr;
- uint32_t len; /* # bytes for strlen + '\0' */
- } string;
- } value;
+ char name[KSTAT_STRLEN]; /* name of counter */
+ uchar_t data_type; /* data type */
+ union {
+ char c[16]; /* 128-bit int */
+ int32_t i32; /* 32-bit signed int */
+ uint32_t ui32; /* 32-bit unsigned int */
+ int64_t i64; /* 64-bit signed int */
+ uint64_t ui64; /* 64-bit unsigned int */
+ long l; /* native signed long */
+ ulong_t ul; /* native unsigned long */
+ struct {
+ union {
+ char *ptr; /* NULL-term string */
+ char __pad[8]; /* 64-bit padding */
+ } addr;
+ uint32_t len; /* # bytes for strlen + '\0' */
+ } string;
+ } value;
} kstat_named_t;
-#define KSTAT_NAMED_STR_PTR(knptr) ((knptr)->value.string.addr.ptr)
-#define KSTAT_NAMED_STR_BUFLEN(knptr) ((knptr)->value.string.len)
+#define KSTAT_NAMED_STR_PTR(knptr) ((knptr)->value.string.addr.ptr)
+#define KSTAT_NAMED_STR_BUFLEN(knptr) ((knptr)->value.string.len)
typedef struct kstat_intr {
- uint_t intrs[KSTAT_NUM_INTRS];
+ uint_t intrs[KSTAT_NUM_INTRS];
} kstat_intr_t;
typedef struct kstat_io {
- u_longlong_t nread; /* number of bytes read */
- u_longlong_t nwritten; /* number of bytes written */
- uint_t reads; /* number of read operations */
- uint_t writes; /* number of write operations */
- hrtime_t wtime; /* cumulative wait (pre-service) time */
- hrtime_t wlentime; /* cumulative wait length*time product*/
- hrtime_t wlastupdate; /* last time wait queue changed */
- hrtime_t rtime; /* cumulative run (service) time */
- hrtime_t rlentime; /* cumulative run length*time product */
- hrtime_t rlastupdate; /* last time run queue changed */
- uint_t wcnt; /* count of elements in wait state */
- uint_t rcnt; /* count of elements in run state */
+ u_longlong_t nread; /* number of bytes read */
+ u_longlong_t nwritten; /* number of bytes written */
+ uint_t reads; /* number of read operations */
+ uint_t writes; /* number of write operations */
+ hrtime_t wtime; /* cumulative wait (pre-service) time */
+ hrtime_t wlentime; /* cumulative wait len*time product */
+ hrtime_t wlastupdate; /* last time wait queue changed */
+ hrtime_t rtime; /* cumulative run (service) time */
+ hrtime_t rlentime; /* cumulative run length*time product */
+ hrtime_t rlastupdate; /* last time run queue changed */
+ uint_t wcnt; /* count of elements in wait state */
+ uint_t rcnt; /* count of elements in run state */
} kstat_io_t;
typedef struct kstat_timer {
- char name[KSTAT_STRLEN+1]; /* event name */
- u_longlong_t num_events; /* number of events */
- hrtime_t elapsed_time; /* cumulative elapsed time */
- hrtime_t min_time; /* shortest event duration */
- hrtime_t max_time; /* longest event duration */
- hrtime_t start_time; /* previous event start time */
- hrtime_t stop_time; /* previous event stop time */
+ char name[KSTAT_STRLEN+1]; /* event name */
+ u_longlong_t num_events; /* number of events */
+ hrtime_t elapsed_time; /* cumulative elapsed time */
+ hrtime_t min_time; /* shortest event duration */
+ hrtime_t max_time; /* longest event duration */
+ hrtime_t start_time; /* previous event start time */
+ hrtime_t stop_time; /* previous event stop time */
} kstat_timer_t;
int spl_kstat_init(void);
void spl_kstat_fini(void);
extern void __kstat_set_raw_ops(kstat_t *ksp,
- int (*headers)(char *buf, size_t size),
- int (*data)(char *buf, size_t size, void *data),
- void* (*addr)(kstat_t *ksp, loff_t index));
+ int (*headers)(char *buf, size_t size),
+ int (*data)(char *buf, size_t size, void *data),
+ void* (*addr)(kstat_t *ksp, loff_t index));
+
extern kstat_t *__kstat_create(const char *ks_module, int ks_instance,
- const char *ks_name, const char *ks_class,
- uchar_t ks_type, uint_t ks_ndata,
- uchar_t ks_flags);
+ const char *ks_name, const char *ks_class, uchar_t ks_type,
+ uint_t ks_ndata, uchar_t ks_flags);
+
extern void __kstat_install(kstat_t *ksp);
extern void __kstat_delete(kstat_t *ksp);
extern void kstat_waitq_enter(kstat_io_t *);
extern void kstat_runq_enter(kstat_io_t *);
extern void kstat_runq_exit(kstat_io_t *);
-#define kstat_set_raw_ops(k,h,d,a) __kstat_set_raw_ops(k,h,d,a)
-#define kstat_create(m,i,n,c,t,s,f) __kstat_create(m,i,n,c,t,s,f)
-#define kstat_install(k) __kstat_install(k)
-#define kstat_delete(k) __kstat_delete(k)
+#define kstat_set_raw_ops(k, h, d, a) \
+ __kstat_set_raw_ops(k, h, d, a)
+#define kstat_create(m, i, n, c, t, s, f) \
+ __kstat_create(m, i, n, c, t, s, f)
+
+#define kstat_install(k) __kstat_install(k)
+#define kstat_delete(k) __kstat_delete(k)
#endif /* _SPL_KSTAT_H */
\*****************************************************************************/
#ifndef _SPL_LIST_H
-#define _SPL_LIST_H
+#define _SPL_LIST_H
#include <sys/types.h>
#include <linux/list.h>
list_node_t list_head;
} list_t;
-#define list_d2l(a, obj) ((list_node_t *)(((char *)obj) + (a)->list_offset))
-#define list_object(a, node) ((void *)(((char *)node) - (a)->list_offset))
+#define list_d2l(a, obj) ((list_node_t *)(((char *)obj) + (a)->list_offset))
+#define list_object(a, node) ((void *)(((char *)node) - (a)->list_offset))
static inline int
list_is_empty(list_t *list)
{
- return list_empty(&list->list_head);
+ return (list_empty(&list->list_head));
}
static inline void
{
ASSERT(list);
ASSERT(size > 0);
- ASSERT(size >= offset + sizeof(list_node_t));
+ ASSERT(size >= offset + sizeof (list_node_t));
list->list_size = size;
list->list_offset = offset;
{
list_node_t *head = list->list_head.next;
if (head == &list->list_head)
- return NULL;
+ return (NULL);
list_del(head);
- return list_object(list, head);
+ return (list_object(list, head));
}
static inline void *
{
list_node_t *tail = list->list_head.prev;
if (tail == &list->list_head)
- return NULL;
+ return (NULL);
list_del(tail);
- return list_object(list, tail);
+ return (list_object(list, tail));
}
static inline void *
list_head(list_t *list)
{
if (list_is_empty(list))
- return NULL;
+ return (NULL);
- return list_object(list, list->list_head.next);
+ return (list_object(list, list->list_head.next));
}
static inline void *
list_tail(list_t *list)
{
if (list_is_empty(list))
- return NULL;
+ return (NULL);
- return list_object(list, list->list_head.prev);
+ return (list_object(list, list->list_head.prev));
}
static inline void *
list_node_t *node = list_d2l(list, object);
if (node->next != &list->list_head)
- return list_object(list, node->next);
+ return (list_object(list, node->next));
- return NULL;
+ return (NULL);
}
static inline void *
list_node_t *node = list_d2l(list, object);
if (node->prev != &list->list_head)
- return list_object(list, node->prev);
+ return (list_object(list, node->prev));
- return NULL;
+ return (NULL);
}
static inline int
list_splice_init(&src->list_head, dst->list_head.prev);
}
-#define list_move_tail(dst, src) spl_list_move_tail(dst, src)
+#define list_move_tail(dst, src) spl_list_move_tail(dst, src)
static inline void
list_link_replace(list_node_t *old_node, list_node_t *new_node)
\*****************************************************************************/
#ifndef _SPL_MKDEV_H
-#define _SPL_MKDEV_H
+#define _SPL_MKDEV_H
#endif /* SPL_MKDEV_H */
\*****************************************************************************/
#ifndef _SPL_MNTENT_H
-#define _SPL_MNTENT_H
+#define _SPL_MNTENT_H
#endif /* SPL_MNTENT_H */
\*****************************************************************************/
#ifndef _SPL_MODCTL_H
-#define _SPL_MODCTL_H
+#define _SPL_MODCTL_H
#endif /* SPL_MODCTL_H */
\*****************************************************************************/
#ifndef _SPL_MODE_H
-#define _SPL_MODE_H
+#define _SPL_MODE_H
-#define IFTOVT(mode) vn_mode_to_vtype(mode)
-#define VTTOIF(vtype) vn_vtype_to_mode(vtype)
-#define MAKEIMODE(T, M) (VTTOIF(T) | ((M) & ~S_IFMT))
+#define IFTOVT(mode) vn_mode_to_vtype(mode)
+#define VTTOIF(vtype) vn_vtype_to_mode(vtype)
+#define MAKEIMODE(T, M) (VTTOIF(T) | ((M) & ~S_IFMT))
#endif /* SPL_MODE_H */
\*****************************************************************************/
#ifndef _SPL_MOUNT_H
-#define _SPL_MOUNT_H
+#define _SPL_MOUNT_H
#endif /* SPL_MOUNT_H */
lockdep_on(); \
}
#else /* CONFIG_LOCKDEP */
-#define spl_mutex_set_type(mp, type)
-#define spl_mutex_lockdep_off_maybe(mp)
-#define spl_mutex_lockdep_on_maybe(mp)
+#define spl_mutex_set_type(mp, type)
+#define spl_mutex_lockdep_off_maybe(mp)
+#define spl_mutex_lockdep_on_maybe(mp)
#endif /* CONFIG_LOCKDEP */
/*
- * The following functions must be a #define and not static inline.
+ * The following functions must be a #define and not static inline.
* This ensures that the native linux mutex functions (lock/unlock)
* will be correctly located in the users code which is important
* for the built in kernel lock analysis tools
VERIFY3P(mutex_owner(mp), ==, NULL); \
}
+/* BEGIN CSTYLED */
#define mutex_tryenter(mp) \
({ \
int _rc_; \
\
_rc_; \
})
+/* END CSTYLED */
#ifdef CONFIG_DEBUG_LOCK_ALLOC
#define mutex_enter_nested(mp, subclass) \
\*****************************************************************************/
#ifndef _SPL_NOTE_H
-#define _SPL_NOTE_H
+#define _SPL_NOTE_H
#endif /* SPL_NOTE_H */
\*****************************************************************************/
#ifndef _SPL_OPEN_H
-#define _SPL_OPEN_H
+#define _SPL_OPEN_H
#endif /* SPL_OPEN_H */
\*****************************************************************************/
#ifndef _SPL_PARAM_H
-#define _SPL_PARAM_H
+#define _SPL_PARAM_H
#include <asm/page.h>
/* Pages to bytes and back */
-#define ptob(pages) ((pages) << PAGE_SHIFT)
-#define btop(bytes) ((bytes) >> PAGE_SHIFT)
+#define ptob(pages) ((pages) << PAGE_SHIFT)
+#define btop(bytes) ((bytes) >> PAGE_SHIFT)
-#define MAXUID UINT32_MAX
+#define MAXUID UINT32_MAX
#endif /* SPL_PARAM_H */
\*****************************************************************************/
#ifndef _SPL_PATHNAME_H
-#define _SPL_PATHNAME_H
+#define _SPL_PATHNAME_H
typedef struct pathname {
char *pn_buf; /* underlying storage */
\*****************************************************************************/
#ifndef _SPL_POLICY_H
-#define _SPL_POLICY_H
+#define _SPL_POLICY_H
-#define secpolicy_fs_unmount(c,vfs) (0)
+#define secpolicy_fs_unmount(c, vfs) (0)
#define secpolicy_nfs(c) (0)
-#define secpolicy_sys_config(c,co) (0)
+#define secpolicy_sys_config(c, co) (0)
#define secpolicy_zfs(c) (0)
#define secpolicy_zinject(c) (0)
-#define secpolicy_vnode_setids_setgids(c,id) (0)
+#define secpolicy_vnode_setids_setgids(c, id) (0)
#define secpolicy_vnode_setid_retain(c, sr) (0)
#define secpolicy_setid_clear(v, c) (0)
-#define secpolicy_vnode_any_access(c,vp,o) (0)
-#define secpolicy_vnode_access2(c,cp,o,m1,m2) (0)
-#define secpolicy_vnode_chown(c,o) (0)
-#define secpolicy_vnode_setdac(c,o) (0)
+#define secpolicy_vnode_any_access(c, vp, o) (0)
+#define secpolicy_vnode_access2(c, cp, o, m1, m2) (0)
+#define secpolicy_vnode_chown(c, o) (0)
+#define secpolicy_vnode_setdac(c, o) (0)
#define secpolicy_vnode_remove(c) (0)
-#define secpolicy_vnode_setattr(c,v,a,o,f,func,n) (0)
+#define secpolicy_vnode_setattr(c, v, a, o, f, func, n) (0)
#define secpolicy_xvattr(x, o, c, t) (0)
#define secpolicy_vnode_stky_modify(c) (0)
-#define secpolicy_setid_setsticky_clear(v,a,o,c) (0)
+#define secpolicy_setid_setsticky_clear(v, a, o, c) (0)
#define secpolicy_basic_link(c) (0)
#endif /* SPL_POLICY_H */
\*****************************************************************************/
#ifndef _SPL_POOL_H
-#define _SPL_POOL_H
+#define _SPL_POOL_H
#include <sys/pset.h>
\*****************************************************************************/
#ifndef _SPL_PRIV_IMPL_H
-#define _SPL_PRIV_IMPL_H
+#define _SPL_PRIV_IMPL_H
#endif /* _SPL_PRIV_IMPL_H */
\*****************************************************************************/
#ifndef _SPL_PROC_H
-#define _SPL_PROC_H
+#define _SPL_PROC_H
#endif /* SPL_PROC_H */
#ifndef _SPL_PROCESSOR_H
#define _SPL_PROCESSOR_H
-#define getcpuid() smp_processor_id()
+#define getcpuid() smp_processor_id()
typedef int processorid_t;
\*****************************************************************************/
#ifndef _SPL_PSET_H
-#define _SPL_PSET_H
+#define _SPL_PSET_H
typedef int psetid_t;
/* special processor set id's */
-#define PS_NONE -1
-#define PS_QUERY -2
-#define PS_MYID -3
-#define PS_SOFT -4
-#define PS_HARD -5
-#define PS_QUERY_TYPE -6
+#define PS_NONE -1
+#define PS_QUERY -2
+#define PS_MYID -3
+#define PS_SOFT -4
+#define PS_HARD -5
+#define PS_QUERY_TYPE -6
#endif /* SPL_PSET_H */
static __inline__ int
random_get_bytes(uint8_t *ptr, size_t len)
{
- get_random_bytes((void *)ptr,(int)len);
- return 0;
+ get_random_bytes((void *)ptr, (int)len);
+ return (0);
}
extern int random_get_pseudo_bytes(uint8_t *ptr, size_t len);
\*****************************************************************************/
#ifndef _SPL_REFSTR_H
-#define _SPL_REFSTR_H
+#define _SPL_REFSTR_H
#endif /* SPL_REFSTR_H */
\*****************************************************************************/
#ifndef _SPL_RESOURCE_H
-#define _SPL_RESOURCE_H
+#define _SPL_RESOURCE_H
#include <linux/resource.h>
\*****************************************************************************/
#ifndef _SPL_RWLOCK_H
-#define _SPL_RWLOCK_H
+#define _SPL_RWLOCK_H
#include <sys/types.h>
#include <linux/rwsem.h>
#endif /* CONFIG_LOCKDEP */
} krwlock_t;
-#define SEM(rwp) (&(rwp)->rw_rwlock)
+#define SEM(rwp) (&(rwp)->rw_rwlock)
static inline void
spl_rw_set_owner(krwlock_t *rwp)
rw_owner(krwlock_t *rwp)
{
#ifdef CONFIG_RWSEM_SPIN_ON_OWNER
- return SEM(rwp)->owner;
+ return (SEM(rwp)->owner);
#else
- return rwp->rw_owner;
+ return (rwp->rw_owner);
#endif
}
lockdep_on(); \
}
#else /* CONFIG_LOCKDEP */
-#define spl_rw_set_type(rwp, type)
-#define spl_rw_lockdep_off_maybe(rwp)
-#define spl_rw_lockdep_on_maybe(rwp)
+#define spl_rw_set_type(rwp, type)
+#define spl_rw_lockdep_off_maybe(rwp)
+#define spl_rw_lockdep_on_maybe(rwp)
#endif /* CONFIG_LOCKDEP */
static inline int
static inline int
RW_LOCK_HELD(krwlock_t *rwp)
{
- return spl_rwsem_is_locked(SEM(rwp));
+ return (spl_rwsem_is_locked(SEM(rwp)));
}
/*
- * The following functions must be a #define and not static inline.
+ * The following functions must be a #define and not static inline.
* This ensures that the native linux semaphore functions (down/up)
* will be correctly located in the users code which is important
* for the built in kernel lock analysis tools
*/
-#define rw_init(rwp, name, type, arg) \
+/* BEGIN CSTYLED */
+#define rw_init(rwp, name, type, arg) \
({ \
static struct lock_class_key __key; \
ASSERT(type == RW_DEFAULT || type == RW_NOLOCKDEP); \
spl_rw_set_type(rwp, type); \
})
-#define rw_destroy(rwp) \
+#define rw_destroy(rwp) \
({ \
VERIFY(!RW_LOCK_HELD(rwp)); \
})
-#define rw_tryenter(rwp, rw) \
+#define rw_tryenter(rwp, rw) \
({ \
int _rc_ = 0; \
\
_rc_; \
})
-#define rw_enter(rwp, rw) \
+#define rw_enter(rwp, rw) \
({ \
spl_rw_lockdep_off_maybe(rwp); \
switch (rw) { \
spl_rw_lockdep_on_maybe(rwp); \
})
-#define rw_exit(rwp) \
+#define rw_exit(rwp) \
({ \
spl_rw_lockdep_off_maybe(rwp); \
if (RW_WRITE_HELD(rwp)) { \
spl_rw_lockdep_on_maybe(rwp); \
})
-#define rw_downgrade(rwp) \
+#define rw_downgrade(rwp) \
({ \
spl_rw_lockdep_off_maybe(rwp); \
spl_rw_clear_owner(rwp); \
spl_rw_lockdep_on_maybe(rwp); \
})
-#define rw_tryupgrade(rwp) \
+#define rw_tryupgrade(rwp) \
({ \
int _rc_ = 0; \
\
} \
_rc_; \
})
+/* END CSTYLED */
int spl_rw_init(void);
void spl_rw_fini(void);
\*****************************************************************************/
#ifndef _SPL_SDT_H
-#define _SPL_SDT_H
+#define _SPL_SDT_H
-#define SET_ERROR(x) (x)
+#define SET_ERROR(x) (x)
#endif /* SPL_SDT_H */
\*****************************************************************************/
#ifndef _SPL_SID_H
-#define _SPL_SID_H
+#define _SPL_SID_H
typedef struct ksiddomain {
char *kd_name;
static inline ksiddomain_t *
ksid_lookupdomain(const char *dom)
{
- ksiddomain_t *kd;
+ ksiddomain_t *kd;
int len = strlen(dom);
- kd = kmem_zalloc(sizeof(ksiddomain_t), KM_SLEEP);
- kd->kd_name = kmem_zalloc(len + 1, KM_SLEEP);
+ kd = kmem_zalloc(sizeof (ksiddomain_t), KM_SLEEP);
+ kd->kd_name = kmem_zalloc(len + 1, KM_SLEEP);
memcpy(kd->kd_name, dom, len);
- return (kd);
+ return (kd);
}
static inline void
ksiddomain_rele(ksiddomain_t *ksid)
{
kmem_free(ksid->kd_name, strlen(ksid->kd_name) + 1);
- kmem_free(ksid, sizeof(ksiddomain_t));
+ kmem_free(ksid, sizeof (ksiddomain_t));
}
#endif /* _SPL_SID_H */
\*****************************************************************************/
#ifndef _SPL_SIGNAL_H
-#define _SPL_SIGNAL_H
+#define _SPL_SIGNAL_H
#include <linux/sched.h>
#define FORREAL 0 /* Usual side-effects */
#define JUSTLOOKING 1 /* Don't stop the process */
-/* The "why" argument indicates the allowable side-effects of the call:
+/*
+ * The "why" argument indicates the allowable side-effects of the call:
*
* FORREAL: Extract the next pending signal from p_sig into p_cursig;
* stop the process if a stop has been requested or if a traced signal
{
ASSERT(why == FORREAL || why == JUSTLOOKING);
- return signal_pending(current);
+ return (signal_pending(current));
}
#endif /* SPL_SIGNAL_H */
\*****************************************************************************/
#ifndef _SPL_STAT_H
-#define _SPL_STAT_H
+#define _SPL_STAT_H
#include <linux/stat.h>
\*****************************************************************************/
#ifndef _SPL_STROPTS_H
-#define _SPL_STROPTS_H
+#define _SPL_STROPTS_H
#endif /* SPL_STROPTS_H */
\*****************************************************************************/
#ifndef _SPL_SUNDDI_H
-#define _SPL_SUNDDI_H
+#define _SPL_SUNDDI_H
#include <sys/cred.h>
#include <sys/uio.h>
#define DDI_SUCCESS 0
#define DDI_FAILURE -1
-#define ddi_prop_lookup_string(x1,x2,x3,x4,x5) (*x5 = NULL)
-#define ddi_prop_free(x) (void)0
-#define ddi_root_node() (void)0
+#define ddi_prop_lookup_string(x1, x2, x3, x4, x5) (*x5 = NULL)
+#define ddi_prop_free(x) (void)0
+#define ddi_root_node() (void)0
extern int ddi_strtoul(const char *, char **, int, unsigned long *);
extern int ddi_strtol(const char *, char **, int, long *);
\*****************************************************************************/
#ifndef _SPL_SUNLDI_H
-#define _SPL_SUNLDI_H
+#define _SPL_SUNLDI_H
#include <sys/types.h>
#include <linux/fs.h>
#include <linux/bio.h>
#include <linux/blkdev.h>
-#define SECTOR_SIZE 512
+#define SECTOR_SIZE 512
#endif /* SPL_SUNLDI_H */
\*****************************************************************************/
#ifndef _SPL_SYSDC_H
-#define _SPL_SYSDC_H
+#define _SPL_SYSDC_H
#endif /* SPL_SYSDC_H */
DIST_COMMON = $(am__kernel_HEADERS_DIST) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/kernel-ctl-table-name.m4 \
+ $(top_srcdir)/config/kernel-fallocate.m4 \
+ $(top_srcdir)/config/kernel-group-info.m4 \
+ $(top_srcdir)/config/kernel-inode-lock.m4 \
+ $(top_srcdir)/config/kernel-kmem-cache.m4 \
+ $(top_srcdir)/config/kernel-kuidgid.m4 \
+ $(top_srcdir)/config/kernel-pde-data.m4 \
+ $(top_srcdir)/config/kernel-rw.m4 \
+ $(top_srcdir)/config/kernel-rwsem.m4 \
+ $(top_srcdir)/config/kernel-sched.m4 \
+ $(top_srcdir)/config/kernel-set-fs-pwd.m4 \
+ $(top_srcdir)/config/kernel-shrinker.m4 \
+ $(top_srcdir)/config/kernel-spinlock.m4 \
+ $(top_srcdir)/config/kernel-timer.m4 \
+ $(top_srcdir)/config/kernel-trim-unused-symbols.m4 \
+ $(top_srcdir)/config/kernel-truncate-range.m4 \
+ $(top_srcdir)/config/kernel-urange-sleep.m4 \
+ $(top_srcdir)/config/kernel-vfs-fsync.m4 \
+ $(top_srcdir)/config/kernel-vfs-getattr.m4 \
+ $(top_srcdir)/config/kernel-wait.m4 \
+ $(top_srcdir)/config/kernel-zlib.m4 \
+ $(top_srcdir)/config/libtool.m4 \
$(top_srcdir)/config/ltoptions.m4 \
$(top_srcdir)/config/ltsugar.m4 \
$(top_srcdir)/config/ltversion.m4 \
\*****************************************************************************/
#ifndef _SPL_SYSMACROS_H
-#define _SPL_SYSMACROS_H
+#define _SPL_SYSMACROS_H
#include <linux/module.h>
#include <linux/sched.h>
#endif
#ifndef _KERNEL
-#define _KERNEL __KERNEL__
+#define _KERNEL __KERNEL__
#endif
-#define FALSE 0
-#define TRUE 1
-
-#define INT8_MAX (127)
-#define INT8_MIN (-128)
-#define UINT8_MAX (255)
-#define UINT8_MIN (0)
-
-#define INT16_MAX (32767)
-#define INT16_MIN (-32768)
-#define UINT16_MAX (65535)
-#define UINT16_MIN (0)
-
-#define INT32_MAX INT_MAX
-#define INT32_MIN INT_MIN
-#define UINT32_MAX UINT_MAX
-#define UINT32_MIN UINT_MIN
-
-#define INT64_MAX LLONG_MAX
-#define INT64_MIN LLONG_MIN
-#define UINT64_MAX ULLONG_MAX
-#define UINT64_MIN ULLONG_MIN
-
-#define NBBY 8
-#define ENOTSUP EOPNOTSUPP
-
-#define MAXMSGLEN 256
-#define MAXNAMELEN 256
-#define MAXPATHLEN PATH_MAX
-#define MAXOFFSET_T LLONG_MAX
-#define MAXBSIZE 8192
-#define DEV_BSIZE 512
-#define DEV_BSHIFT 9 /* log2(DEV_BSIZE) */
-
-#define proc_pageout NULL
-#define curproc current
-#define max_ncpus num_possible_cpus()
-#define boot_ncpus num_online_cpus()
-#define CPU_SEQID smp_processor_id()
-#define _NOTE(x)
-#define is_system_labeled() 0
+#define FALSE 0
+#define TRUE 1
+
+#define INT8_MAX (127)
+#define INT8_MIN (-128)
+#define UINT8_MAX (255)
+#define UINT8_MIN (0)
+
+#define INT16_MAX (32767)
+#define INT16_MIN (-32768)
+#define UINT16_MAX (65535)
+#define UINT16_MIN (0)
+
+#define INT32_MAX INT_MAX
+#define INT32_MIN INT_MIN
+#define UINT32_MAX UINT_MAX
+#define UINT32_MIN UINT_MIN
+
+#define INT64_MAX LLONG_MAX
+#define INT64_MIN LLONG_MIN
+#define UINT64_MAX ULLONG_MAX
+#define UINT64_MIN ULLONG_MIN
+
+#define NBBY 8
+#define ENOTSUP EOPNOTSUPP
+
+#define MAXMSGLEN 256
+#define MAXNAMELEN 256
+#define MAXPATHLEN PATH_MAX
+#define MAXOFFSET_T LLONG_MAX
+#define MAXBSIZE 8192
+#define DEV_BSIZE 512
+#define DEV_BSHIFT 9 /* log2(DEV_BSIZE) */
+
+#define proc_pageout NULL
+#define curproc current
+#define max_ncpus num_possible_cpus()
+#define boot_ncpus num_online_cpus()
+#define CPU_SEQID smp_processor_id()
+#define _NOTE(x)
+#define is_system_labeled() 0
#ifndef RLIM64_INFINITY
-#define RLIM64_INFINITY (~0ULL)
+#define RLIM64_INFINITY (~0ULL)
#endif
-/* 0..MAX_PRIO-1: Process priority
+/*
+ * 0..MAX_PRIO-1: Process priority
* 0..MAX_RT_PRIO-1: RT priority tasks
* MAX_RT_PRIO..MAX_PRIO-1: SCHED_NORMAL tasks
*
* Treat shim tasks as SCHED_NORMAL tasks
*/
-#define minclsyspri (MAX_PRIO-1)
-#define maxclsyspri (MAX_RT_PRIO)
-#define defclsyspri (DEFAULT_PRIO)
+#define minclsyspri (MAX_PRIO-1)
+#define maxclsyspri (MAX_RT_PRIO)
+#define defclsyspri (DEFAULT_PRIO)
#ifndef NICE_TO_PRIO
-#define NICE_TO_PRIO(nice) (MAX_RT_PRIO + (nice) + 20)
+#define NICE_TO_PRIO(nice) (MAX_RT_PRIO + (nice) + 20)
#endif
#ifndef PRIO_TO_NICE
-#define PRIO_TO_NICE(prio) ((prio) - MAX_RT_PRIO - 20)
+#define PRIO_TO_NICE(prio) ((prio) - MAX_RT_PRIO - 20)
#endif
/*
* Missing macros
*/
#ifndef PAGESIZE
-#define PAGESIZE PAGE_SIZE
+#define PAGESIZE PAGE_SIZE
#endif
#ifndef PAGESHIFT
-#define PAGESHIFT PAGE_SHIFT
+#define PAGESHIFT PAGE_SHIFT
#endif
/* from Solaris sys/byteorder.h */
-#define BSWAP_8(x) ((x) & 0xff)
-#define BSWAP_16(x) ((BSWAP_8(x) << 8) | BSWAP_8((x) >> 8))
-#define BSWAP_32(x) ((BSWAP_16(x) << 16) | BSWAP_16((x) >> 16))
-#define BSWAP_64(x) ((BSWAP_32(x) << 32) | BSWAP_32((x) >> 32))
+#define BSWAP_8(x) ((x) & 0xff)
+#define BSWAP_16(x) ((BSWAP_8(x) << 8) | BSWAP_8((x) >> 8))
+#define BSWAP_32(x) ((BSWAP_16(x) << 16) | BSWAP_16((x) >> 16))
+#define BSWAP_64(x) ((BSWAP_32(x) << 32) | BSWAP_32((x) >> 32))
-/* Map some simple functions.
+/*
+ * Map some simple functions.
*/
-#define bzero(ptr,size) memset(ptr,0,size)
-#define bcopy(src,dest,size) memmove(dest,src,size)
-#define bcmp(src,dest,size) memcmp((src), (dest), (size_t)(size))
+#define bzero(ptr, size) memset(ptr, 0, size)
+#define bcopy(src, dest, size) memmove(dest, src, size)
+#define bcmp(src, dest, size) memcmp((src), (dest), (size_t)(size))
/* Dtrace probes do not exist in the linux kernel */
#ifdef DTRACE_PROBE
#undef DTRACE_PROBE
#endif /* DTRACE_PROBE */
-#define DTRACE_PROBE(a) ((void)0)
+#define DTRACE_PROBE(a) ((void)0)
#ifdef DTRACE_PROBE1
#undef DTRACE_PROBE1
#endif /* DTRACE_PROBE1 */
-#define DTRACE_PROBE1(a, b, c) ((void)0)
+#define DTRACE_PROBE1(a, b, c) ((void)0)
#ifdef DTRACE_PROBE2
#undef DTRACE_PROBE2
#endif /* DTRACE_PROBE2 */
-#define DTRACE_PROBE2(a, b, c, d, e) ((void)0)
+#define DTRACE_PROBE2(a, b, c, d, e) ((void)0)
#ifdef DTRACE_PROBE3
#undef DTRACE_PROBE3
#endif /* DTRACE_PROBE3 */
-#define DTRACE_PROBE3(a, b, c, d, e, f, g) ((void)0)
+#define DTRACE_PROBE3(a, b, c, d, e, f, g) ((void)0)
#ifdef DTRACE_PROBE4
#undef DTRACE_PROBE4
#endif /* DTRACE_PROBE4 */
-#define DTRACE_PROBE4(a, b, c, d, e, f, g, h, i) ((void)0)
+#define DTRACE_PROBE4(a, b, c, d, e, f, g, h, i) ((void)0)
/* Missing globals */
extern char spl_version[32];
#define lowbit(x) __ffs(x)
#define highbit64(x) fls64(x)
-#define makedevice(maj,min) makedev(maj,min)
+#define makedevice(maj, min) makedev(maj, min)
/* common macros */
#ifndef MIN
-#define MIN(a, b) ((a) < (b) ? (a) : (b))
+#define MIN(a, b) ((a) < (b) ? (a) : (b))
#endif
#ifndef MAX
-#define MAX(a, b) ((a) < (b) ? (b) : (a))
+#define MAX(a, b) ((a) < (b) ? (b) : (a))
#endif
#ifndef ABS
-#define ABS(a) ((a) < 0 ? -(a) : (a))
+#define ABS(a) ((a) < 0 ? -(a) : (a))
#endif
#ifndef DIV_ROUND_UP
-#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
+#define DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
#endif
#ifndef roundup
-#define roundup(x, y) ((((x) + ((y) - 1)) / (y)) * (y))
+#define roundup(x, y) ((((x) + ((y) - 1)) / (y)) * (y))
#endif
#ifndef howmany
-#define howmany(x, y) (((x) + ((y) - 1)) / (y))
+#define howmany(x, y) (((x) + ((y) - 1)) / (y))
#endif
/*
* Compatibility macros/typedefs needed for Solaris -> Linux port
*/
-#define P2ALIGN(x, align) ((x) & -(align))
-#define P2CROSS(x, y, align) (((x) ^ (y)) > (align) - 1)
-#define P2ROUNDUP(x, align) ((((x) - 1) | ((align) - 1)) + 1)
-#define P2PHASE(x, align) ((x) & ((align) - 1))
-#define P2NPHASE(x, align) (-(x) & ((align) - 1))
-#define ISP2(x) (((x) & ((x) - 1)) == 0)
-#define IS_P2ALIGNED(v, a) ((((uintptr_t)(v)) & ((uintptr_t)(a) - 1))==0)
-#define P2BOUNDARY(off, len, align) \
+#define P2ALIGN(x, align) ((x) & -(align))
+#define P2CROSS(x, y, align) (((x) ^ (y)) > (align) - 1)
+#define P2ROUNDUP(x, align) ((((x) - 1) | ((align) - 1)) + 1)
+#define P2PHASE(x, align) ((x) & ((align) - 1))
+#define P2NPHASE(x, align) (-(x) & ((align) - 1))
+#define ISP2(x) (((x) & ((x) - 1)) == 0)
+#define IS_P2ALIGNED(v, a) ((((uintptr_t)(v)) & ((uintptr_t)(a) - 1)) == 0)
+#define P2BOUNDARY(off, len, align) \
(((off) ^ ((off) + (len) - 1)) > (align) - 1)
/*
* or
* P2ROUNDUP_TYPED(x, PAGESIZE, uint64_t)
*/
-#define P2ALIGN_TYPED(x, align, type) \
- ((type)(x) & -(type)(align))
-#define P2PHASE_TYPED(x, align, type) \
- ((type)(x) & ((type)(align) - 1))
-#define P2NPHASE_TYPED(x, align, type) \
- (-(type)(x) & ((type)(align) - 1))
-#define P2ROUNDUP_TYPED(x, align, type) \
- ((((type)(x) - 1) | ((type)(align) - 1)) + 1)
-#define P2END_TYPED(x, align, type) \
- (-(~(type)(x) & -(type)(align)))
-#define P2PHASEUP_TYPED(x, align, phase, type) \
- ((type)(phase) - (((type)(phase) - (type)(x)) & -(type)(align)))
-#define P2CROSS_TYPED(x, y, align, type) \
- (((type)(x) ^ (type)(y)) > (type)(align) - 1)
-#define P2SAMEHIGHBIT_TYPED(x, y, type) \
- (((type)(x) ^ (type)(y)) < ((type)(x) & (type)(y)))
+#define P2ALIGN_TYPED(x, align, type) \
+ ((type)(x) & -(type)(align))
+#define P2PHASE_TYPED(x, align, type) \
+ ((type)(x) & ((type)(align) - 1))
+#define P2NPHASE_TYPED(x, align, type) \
+ (-(type)(x) & ((type)(align) - 1))
+#define P2ROUNDUP_TYPED(x, align, type) \
+ ((((type)(x) - 1) | ((type)(align) - 1)) + 1)
+#define P2END_TYPED(x, align, type) \
+ (-(~(type)(x) & -(type)(align)))
+#define P2PHASEUP_TYPED(x, align, phase, type) \
+ ((type)(phase) - (((type)(phase) - (type)(x)) & -(type)(align)))
+#define P2CROSS_TYPED(x, y, align, type) \
+ (((type)(x) ^ (type)(y)) > (type)(align) - 1)
+#define P2SAMEHIGHBIT_TYPED(x, y, type) \
+ (((type)(x) ^ (type)(y)) < ((type)(x) & (type)(y)))
#if defined(_KERNEL) && !defined(_KMEMUSER) && !defined(offsetof)
/* avoid any possibility of clashing with <stddef.h> version */
-#define offsetof(s, m) ((size_t)(&(((s *)0)->m)))
+#define offsetof(s, m) ((size_t)(&(((s *)0)->m)))
#endif
#endif /* _SPL_SYSMACROS_H */
\*****************************************************************************/
#ifndef _SPL_SYSTEMINFO_H
-#define _SPL_SYSTEMINFO_H
+#define _SPL_SYSTEMINFO_H
-#define HW_HOSTID_LEN 11 /* minimum buffer size needed */
+#define HW_HOSTID_LEN 11 /* minimum buffer size needed */
/* to hold a decimal or hex */
/* hostid string */
/* Supplemental definitions for Linux. */
-#define HW_HOSTID_PATH "/etc/hostid" /* binary configuration file */
-#define HW_HOSTID_MASK 0xFFFFFFFF /* significant hostid bits */
+#define HW_HOSTID_PATH "/etc/hostid" /* binary configuration file */
+#define HW_HOSTID_MASK 0xFFFFFFFF /* significant hostid bits */
#endif /* SPL_SYSTEMINFO_H */
\*****************************************************************************/
#ifndef _SPL_SYSTM_H
-#define _SPL_SYSTM_H
+#define _SPL_SYSTM_H
#include <sys/sunddi.h>
\*****************************************************************************/
#ifndef _SPL_T_LOCK_H
-#define _SPL_T_LOCK_H
+#define _SPL_T_LOCK_H
#include <sys/param.h>
#include <sys/mutex.h>
taskqid_t tq_lowest_id; /* lowest pend/work id */
struct list_head tq_free_list; /* free taskq_ent_t's */
struct list_head tq_pend_list; /* pending taskq_ent_t's */
- struct list_head tq_prio_list; /* priority pending taskq_ent_t's */
+ struct list_head tq_prio_list; /* priority taskq_ent_t's */
struct list_head tq_delay_list; /* delayed taskq_ent_t's */
struct list_head tq_taskqs; /* all taskq_t's */
spl_wait_queue_head_t tq_work_waitq; /* new work waitq */
\*****************************************************************************/
#ifndef _SPL_THREAD_H
-#define _SPL_THREAD_H
+#define _SPL_THREAD_H
#include <linux/module.h>
#include <linux/mm.h>
/*
* Thread interfaces
*/
-#define TP_MAGIC 0x53535353
+#define TP_MAGIC 0x53535353
-#define TS_SLEEP TASK_INTERRUPTIBLE
-#define TS_RUN TASK_RUNNING
-#define TS_ZOMB EXIT_ZOMBIE
-#define TS_STOPPED TASK_STOPPED
+#define TS_SLEEP TASK_INTERRUPTIBLE
+#define TS_RUN TASK_RUNNING
+#define TS_ZOMB EXIT_ZOMBIE
+#define TS_STOPPED TASK_STOPPED
typedef void (*thread_func_t)(void *);
-#define thread_create(stk, stksize, func, arg, len, pp, state, pri) \
- __thread_create(stk, stksize, (thread_func_t)func, \
- #func, arg, len, pp, state, pri)
-#define thread_exit() __thread_exit()
-#define thread_join(t) VERIFY(0)
-#define curthread current
-#define getcomm() current->comm
-#define getpid() current->pid
+/* BEGIN CSTYLED */
+#define thread_create(stk, stksize, func, arg, len, pp, state, pri) \
+ __thread_create(stk, stksize, (thread_func_t)func, \
+ #func, arg, len, pp, state, pri)
+/* END CSTYLED */
+
+#define thread_exit() __thread_exit()
+#define thread_join(t) VERIFY(0)
+#define curthread current
+#define getcomm() current->comm
+#define getpid() current->pid
extern kthread_t *__thread_create(caddr_t stk, size_t stksize,
- thread_func_t func, const char *name,
- void *args, size_t len, proc_t *pp,
- int state, pri_t pri);
+ thread_func_t func, const char *name, void *args, size_t len, proc_t *pp,
+ int state, pri_t pri);
extern void __thread_exit(void);
extern struct task_struct *spl_kthread_create(int (*func)(void *),
void *data, const char namefmt[], ...);
\*****************************************************************************/
#ifndef _SPL_TIMER_H
-#define _SPL_TIMER_H
+#define _SPL_TIMER_H
#include <linux/module.h>
#include <linux/sched.h>
#include <linux/timer.h>
-#define lbolt ((clock_t)jiffies)
-#define lbolt64 ((int64_t)get_jiffies_64())
+#define lbolt ((clock_t)jiffies)
+#define lbolt64 ((int64_t)get_jiffies_64())
-#define ddi_get_lbolt() ((clock_t)jiffies)
-#define ddi_get_lbolt64() ((int64_t)get_jiffies_64())
+#define ddi_get_lbolt() ((clock_t)jiffies)
+#define ddi_get_lbolt64() ((int64_t)get_jiffies_64())
-#define ddi_time_before(a, b) (typecheck(clock_t, a) && \
+#define ddi_time_before(a, b) (typecheck(clock_t, a) && \
typecheck(clock_t, b) && \
((a) - (b) < 0))
-#define ddi_time_after(a, b) ddi_time_before(b, a)
-#define ddi_time_before_eq(a, b) (!ddi_time_after(a, b))
-#define ddi_time_after_eq(a, b) ddi_time_before_eq(b, a)
+#define ddi_time_after(a, b) ddi_time_before(b, a)
+#define ddi_time_before_eq(a, b) (!ddi_time_after(a, b))
+#define ddi_time_after_eq(a, b) ddi_time_before_eq(b, a)
-#define ddi_time_before64(a, b) (typecheck(int64_t, a) && \
+#define ddi_time_before64(a, b) (typecheck(int64_t, a) && \
typecheck(int64_t, b) && \
((a) - (b) < 0))
-#define ddi_time_after64(a, b) ddi_time_before64(b, a)
-#define ddi_time_before_eq64(a, b) (!ddi_time_after64(a, b))
-#define ddi_time_after_eq64(a, b) ddi_time_before_eq64(b, a)
+#define ddi_time_after64(a, b) ddi_time_before64(b, a)
+#define ddi_time_before_eq64(a, b) (!ddi_time_after64(a, b))
+#define ddi_time_after_eq64(a, b) ddi_time_before_eq64(b, a)
-#define delay(ticks) schedule_timeout_uninterruptible(ticks)
+#define delay(ticks) schedule_timeout_uninterruptible(ticks)
-#define SEC_TO_TICK(sec) ((sec) * HZ)
-#define MSEC_TO_TICK(ms) msecs_to_jiffies(ms)
-#define USEC_TO_TICK(us) usecs_to_jiffies(us)
-#define NSEC_TO_TICK(ns) usecs_to_jiffies(ns / NSEC_PER_USEC)
+#define SEC_TO_TICK(sec) ((sec) * HZ)
+#define MSEC_TO_TICK(ms) msecs_to_jiffies(ms)
+#define USEC_TO_TICK(us) usecs_to_jiffies(us)
+#define NSEC_TO_TICK(ns) usecs_to_jiffies(ns / NSEC_PER_USEC)
#endif /* _SPL_TIMER_H */
-
\*****************************************************************************/
#ifndef _SPL_TSD_H
-#define _SPL_TSD_H
+#define _SPL_TSD_H
#include <sys/types.h>
-#define TSD_HASH_TABLE_BITS_DEFAULT 9
-#define TSD_KEYS_MAX 32768
-#define DTOR_PID (PID_MAX_LIMIT+1)
-#define PID_KEY (TSD_KEYS_MAX+1)
+#define TSD_HASH_TABLE_BITS_DEFAULT 9
+#define TSD_KEYS_MAX 32768
+#define DTOR_PID (PID_MAX_LIMIT+1)
+#define PID_KEY (TSD_KEYS_MAX+1)
typedef void (*dtor_func_t)(void *);
#include <sys/sysmacros.h>
#ifndef ULLONG_MAX
-#define ULLONG_MAX (~0ULL)
+#define ULLONG_MAX (~0ULL)
#endif
#ifndef LLONG_MAX
-#define LLONG_MAX ((long long)(~0ULL>>1))
+#define LLONG_MAX ((long long)(~0ULL>>1))
#endif
-typedef enum { B_FALSE=0, B_TRUE=1 } boolean_t;
+typedef enum { B_FALSE = 0, B_TRUE = 1 } boolean_t;
typedef unsigned long intptr_t;
typedef unsigned long ulong_t;
typedef unsigned int uint_t;
\*****************************************************************************/
#ifndef _SPL_U8_TEXTPREP_H
-#define _SPL_U8_TEXTPREP_H
+#define _SPL_U8_TEXTPREP_H
#endif /* SPL_U8_TEXTPREP_H */
\*****************************************************************************/
#ifndef _SPL_UIO_H
-#define _SPL_UIO_H
+#define _SPL_UIO_H
#include <linux/uio.h>
#include <linux/blkdev.h>
typedef struct iovec iovec_t;
typedef enum uio_rw {
- UIO_READ = 0,
- UIO_WRITE = 1,
+ UIO_READ = 0,
+ UIO_WRITE = 1,
} uio_rw_t;
typedef enum uio_seg {
- UIO_USERSPACE = 0,
- UIO_SYSSPACE = 1,
- UIO_USERISPACE= 2,
- UIO_BVEC = 3,
+ UIO_USERSPACE = 0,
+ UIO_SYSSPACE = 1,
+ UIO_USERISPACE = 2,
+ UIO_BVEC = 3,
} uio_seg_t;
typedef struct uio {
} xuio_type_t;
-#define UIOA_IOV_MAX 16
+#define UIOA_IOV_MAX 16
typedef struct uioa_page_s {
int uioa_pfncnt;
} xu_ext;
} xuio_t;
-#define XUIO_XUZC_PRIV(xuio) xuio->xu_ext.xu_zc.xu_zc_priv
-#define XUIO_XUZC_RW(xuio) xuio->xu_ext.xu_zc.xu_zc_rw
+#define XUIO_XUZC_PRIV(xuio) xuio->xu_ext.xu_zc.xu_zc_priv
+#define XUIO_XUZC_RW(xuio) xuio->xu_ext.xu_zc.xu_zc_rw
#endif /* SPL_UIO_H */
\*****************************************************************************/
#ifndef _SPL_UNISTD_H
-#define _SPL_UNISTD_H
+#define _SPL_UNISTD_H
#endif /* SPL_UNISTD_H */
\*****************************************************************************/
#ifndef _SPL_USER_H
-#define _SPL_USER_H
+#define _SPL_USER_H
/*
* We have uf_info_t for areleasef(). We implement areleasef() using a global
struct uf_info;
typedef struct uf_info uf_info_t;
-#define P_FINFO(x) ((uf_info_t *)x)
+#define P_FINFO(x) ((uf_info_t *)x)
#endif /* SPL_USER_H */
\*****************************************************************************/
#ifndef _SPL_VA_LIST_H
-#define _SPL_VA_LIST_H
+#define _SPL_VA_LIST_H
#endif /* SPL_VA_LIST_H */
\*****************************************************************************/
#ifndef _SPL_VARARGS_H
-#define _SPL_VARARGS_H
+#define _SPL_VARARGS_H
-#define __va_list va_list
+#define __va_list va_list
#endif /* SPL_VARARGS_H */
\*****************************************************************************/
#ifndef _SPL_ZFS_H
-#define _SPL_ZFS_H
+#define _SPL_ZFS_H
#include <linux/mount.h>
#include <linux/fs.h>
long fid_pad;
struct {
ushort_t len; /* length of data in bytes */
- char data[MAXFIDSZ];/* data (variable len) */
+ char data[MAXFIDSZ]; /* data (variable len) */
} _fid;
} un;
} fid_t;
\*****************************************************************************/
#ifndef _SPL_OPREG_H
-#define _SPL_OPREG_H
+#define _SPL_OPREG_H
#endif /* SPL_OPREG_H */
\*****************************************************************************/
#ifndef _SPL_VMSYSTM_H
-#define _SPL_VMSYSTM_H
+#define _SPL_VMSYSTM_H
#include <linux/mmzone.h>
#include <linux/mm.h>
{
/* On error copyin routine returns -1 */
if (xcopyin(from, to, len))
- return -1;
+ return (-1);
- return 0;
+ return (0);
}
static __inline__ int
{
/* On error copyout routine returns -1 */
if (xcopyout(from, to, len))
- return -1;
+ return (-1);
- return 0;
+ return (0);
}
static __inline__ int
size_t rc;
if (len == 0)
- return -ENAMETOOLONG;
+ return (-ENAMETOOLONG);
/* XXX: Should return ENAMETOOLONG if 'strlen(from) > len' */
if (done != NULL)
*done = rc;
- return 0;
+ return (0);
}
#endif /* SPL_VMSYSTM_H */
\*****************************************************************************/
#ifndef _SPL_VNODE_H
-#define _SPL_VNODE_H
+#define _SPL_VNODE_H
#include <linux/module.h>
#include <linux/syscalls.h>
* was properly split in to O_SYNC and O_DSYNC respectively.
*/
#ifndef O_DSYNC
-#define O_DSYNC O_SYNC
+#define O_DSYNC O_SYNC
#endif
-#define FREAD 1
-#define FWRITE 2
-#define FCREAT O_CREAT
-#define FTRUNC O_TRUNC
-#define FOFFMAX O_LARGEFILE
-#define FSYNC O_SYNC
-#define FDSYNC O_DSYNC
-#define FRSYNC O_SYNC
-#define FEXCL O_EXCL
-#define FDIRECT O_DIRECT
-#define FAPPEND O_APPEND
+#define FREAD 1
+#define FWRITE 2
+#define FCREAT O_CREAT
+#define FTRUNC O_TRUNC
+#define FOFFMAX O_LARGEFILE
+#define FSYNC O_SYNC
+#define FDSYNC O_DSYNC
+#define FRSYNC O_SYNC
+#define FEXCL O_EXCL
+#define FDIRECT O_DIRECT
+#define FAPPEND O_APPEND
-#define FNODSYNC 0x10000 /* fsync pseudo flag */
-#define FNOFOLLOW 0x20000 /* don't follow symlinks */
+#define FNODSYNC 0x10000 /* fsync pseudo flag */
+#define FNOFOLLOW 0x20000 /* don't follow symlinks */
-#define F_FREESP 11 /* Free file space */
+#define F_FREESP 11 /* Free file space */
/*
#undef AT_UID
#undef AT_GID
-#define AT_MODE ATTR_MODE
-#define AT_UID ATTR_UID
-#define AT_GID ATTR_GID
-#define AT_SIZE ATTR_SIZE
-#define AT_ATIME ATTR_ATIME
-#define AT_MTIME ATTR_MTIME
-#define AT_CTIME ATTR_CTIME
+#define AT_MODE ATTR_MODE
+#define AT_UID ATTR_UID
+#define AT_GID ATTR_GID
+#define AT_SIZE ATTR_SIZE
+#define AT_ATIME ATTR_ATIME
+#define AT_MTIME ATTR_MTIME
+#define AT_CTIME ATTR_CTIME
-#define ATTR_XVATTR (1 << 31)
-#define AT_XVATTR ATTR_XVATTR
+#define ATTR_XVATTR (1 << 31)
+#define AT_XVATTR ATTR_XVATTR
-#define ATTR_IATTR_MASK (ATTR_MODE | ATTR_UID | ATTR_GID | ATTR_SIZE | \
+#define ATTR_IATTR_MASK (ATTR_MODE | ATTR_UID | ATTR_GID | ATTR_SIZE | \
ATTR_ATIME | ATTR_MTIME | ATTR_CTIME | ATTR_FILE)
-#define CRCREAT 0x01
-#define RMFILE 0x02
+#define CRCREAT 0x01
+#define RMFILE 0x02
-#define B_INVAL 0x01
-#define B_TRUNC 0x02
+#define B_INVAL 0x01
+#define B_TRUNC 0x02
-#define LOOKUP_DIR 0x01
-#define LOOKUP_XATTR 0x02
-#define CREATE_XATTR_DIR 0x04
-#define ATTR_NOACLCHECK 0x20
+#define LOOKUP_DIR 0x01
+#define LOOKUP_XATTR 0x02
+#define CREATE_XATTR_DIR 0x04
+#define ATTR_NOACLCHECK 0x20
typedef enum vtype {
VNON = 0,
typedef struct vattr {
enum vtype va_type; /* vnode type */
- u_int va_mask; /* attribute bit-mask */
- u_short va_mode; /* acc mode */
+ uint_t va_mask; /* attribute bit-mask */
+ ushort_t va_mode; /* acc mode */
uid_t va_uid; /* owner uid */
gid_t va_gid; /* owner gid */
long va_fsid; /* fs id */
extern vtype_t vn_mode_to_vtype(mode_t);
extern mode_t vn_vtype_to_mode(vtype_t);
extern int vn_open(const char *path, uio_seg_t seg, int flags, int mode,
- vnode_t **vpp, int x1, void *x2);
+ vnode_t **vpp, int x1, void *x2);
extern int vn_openat(const char *path, uio_seg_t seg, int flags, int mode,
- vnode_t **vpp, int x1, void *x2, vnode_t *vp, int fd);
+ vnode_t **vpp, int x1, void *x2, vnode_t *vp, int fd);
extern int vn_rdwr(uio_rw_t uio, vnode_t *vp, void *addr, ssize_t len,
- offset_t off, uio_seg_t seg, int x1, rlim64_t x2,
- void *x3, ssize_t *residp);
+ offset_t off, uio_seg_t seg, int x1, rlim64_t x2,
+ void *x3, ssize_t *residp);
extern int vn_close(vnode_t *vp, int flags, int x1, int x2, void *x3, void *x4);
extern int vn_seek(vnode_t *vp, offset_t o, offset_t *op, void *ct);
-extern int vn_remove(const char *path, uio_seg_t seg, int flags);
-extern int vn_rename(const char *path1, const char *path2, int x1);
extern int vn_getattr(vnode_t *vp, vattr_t *vap, int flags, void *x3, void *x4);
extern int vn_fsync(vnode_t *vp, int flags, void *x3, void *x4);
extern int vn_space(vnode_t *vp, int cmd, struct flock *bfp, int flag,
int spl_vn_init(void);
void spl_vn_fini(void);
-#define VOP_CLOSE vn_close
-#define VOP_SEEK vn_seek
-#define VOP_GETATTR vn_getattr
-#define VOP_FSYNC vn_fsync
-#define VOP_SPACE vn_space
-#define VOP_PUTPAGE(vp, o, s, f, x1, x2) ((void)0)
-#define vn_is_readonly(vp) 0
-#define getf vn_getf
-#define releasef vn_releasef
-#define areleasef vn_areleasef
+#define VOP_CLOSE vn_close
+#define VOP_SEEK vn_seek
+#define VOP_GETATTR vn_getattr
+#define VOP_FSYNC vn_fsync
+#define VOP_SPACE vn_space
+#define VOP_PUTPAGE(vp, o, s, f, x1, x2) ((void)0)
+#define vn_is_readonly(vp) 0
+#define getf vn_getf
+#define releasef vn_releasef
+#define areleasef vn_areleasef
extern vnode_t *rootdir;
*
* You should have received a copy of the GNU General Public License along
* with the SPL. If not, see <http://www.gnu.org/licenses/>.
- *****************************************************************************
+ *
+ *
* z_compress_level/z_uncompress are nearly identical copies of the
* compress2/uncompress functions provided by the official zlib package
* available at http://zlib.net/. The only changes made we to slightly
\*****************************************************************************/
#ifndef _SPL_ZMOD_H
-#define _SPL_ZMOD_H
+#define _SPL_ZMOD_H
#include <sys/types.h>
#include <linux/zlib.h>
\*****************************************************************************/
#ifndef _SPL_ZONE_H
-#define _SPL_ZONE_H
+#define _SPL_ZONE_H
#include <sys/byteorder.h>
\*****************************************************************************/
#ifndef _SPL_UNISTD_H
-#define _SPL_UNISTD_H
+#define _SPL_UNISTD_H
#endif /* SPL_UNISTD_H */
DIST_COMMON = $(am__kernel_HEADERS_DIST) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/kernel-ctl-table-name.m4 \
+ $(top_srcdir)/config/kernel-fallocate.m4 \
+ $(top_srcdir)/config/kernel-group-info.m4 \
+ $(top_srcdir)/config/kernel-inode-lock.m4 \
+ $(top_srcdir)/config/kernel-kmem-cache.m4 \
+ $(top_srcdir)/config/kernel-kuidgid.m4 \
+ $(top_srcdir)/config/kernel-pde-data.m4 \
+ $(top_srcdir)/config/kernel-rw.m4 \
+ $(top_srcdir)/config/kernel-rwsem.m4 \
+ $(top_srcdir)/config/kernel-sched.m4 \
+ $(top_srcdir)/config/kernel-set-fs-pwd.m4 \
+ $(top_srcdir)/config/kernel-shrinker.m4 \
+ $(top_srcdir)/config/kernel-spinlock.m4 \
+ $(top_srcdir)/config/kernel-timer.m4 \
+ $(top_srcdir)/config/kernel-trim-unused-symbols.m4 \
+ $(top_srcdir)/config/kernel-truncate-range.m4 \
+ $(top_srcdir)/config/kernel-urange-sleep.m4 \
+ $(top_srcdir)/config/kernel-vfs-fsync.m4 \
+ $(top_srcdir)/config/kernel-vfs-getattr.m4 \
+ $(top_srcdir)/config/kernel-wait.m4 \
+ $(top_srcdir)/config/kernel-zlib.m4 \
+ $(top_srcdir)/config/libtool.m4 \
$(top_srcdir)/config/ltoptions.m4 \
$(top_srcdir)/config/ltsugar.m4 \
$(top_srcdir)/config/ltversion.m4 \
\*****************************************************************************/
#ifndef _SPL_QSORT_H
-#define _SPL_QSORT_H
+#define _SPL_QSORT_H
#include <linux/sort.h>
-#define qsort(base, num, size, cmp) sort(base, num, size, cmp, NULL)
+#define qsort(base, num, size, cmp) sort(base, num, size, cmp, NULL)
#endif /* SPL_QSORT_H */
\*****************************************************************************/
#ifndef _SPL_UTIL_SSCANF_H
-#define _SPL_UTIL_SSCANF_H
+#define _SPL_UTIL_SSCANF_H
#endif /* SPL_UTIL_SSCAN_H */
DIST_COMMON = $(am__kernel_HEADERS_DIST) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/kernel-ctl-table-name.m4 \
+ $(top_srcdir)/config/kernel-fallocate.m4 \
+ $(top_srcdir)/config/kernel-group-info.m4 \
+ $(top_srcdir)/config/kernel-inode-lock.m4 \
+ $(top_srcdir)/config/kernel-kmem-cache.m4 \
+ $(top_srcdir)/config/kernel-kuidgid.m4 \
+ $(top_srcdir)/config/kernel-pde-data.m4 \
+ $(top_srcdir)/config/kernel-rw.m4 \
+ $(top_srcdir)/config/kernel-rwsem.m4 \
+ $(top_srcdir)/config/kernel-sched.m4 \
+ $(top_srcdir)/config/kernel-set-fs-pwd.m4 \
+ $(top_srcdir)/config/kernel-shrinker.m4 \
+ $(top_srcdir)/config/kernel-spinlock.m4 \
+ $(top_srcdir)/config/kernel-timer.m4 \
+ $(top_srcdir)/config/kernel-trim-unused-symbols.m4 \
+ $(top_srcdir)/config/kernel-truncate-range.m4 \
+ $(top_srcdir)/config/kernel-urange-sleep.m4 \
+ $(top_srcdir)/config/kernel-vfs-fsync.m4 \
+ $(top_srcdir)/config/kernel-vfs-getattr.m4 \
+ $(top_srcdir)/config/kernel-wait.m4 \
+ $(top_srcdir)/config/kernel-zlib.m4 \
+ $(top_srcdir)/config/libtool.m4 \
$(top_srcdir)/config/ltoptions.m4 \
$(top_srcdir)/config/ltsugar.m4 \
$(top_srcdir)/config/ltversion.m4 \
\*****************************************************************************/
#ifndef _SPL_VM_ANON_H
-#define _SPL_VM_ANON_H
+#define _SPL_VM_ANON_H
#endif /* SPL_VM_ANON_H */
\*****************************************************************************/
#ifndef _SPL_VM_PVN_H
-#define _SPL_VM_PVN_H
+#define _SPL_VM_PVN_H
#endif /* SPL_VM_PVN_H */
\*****************************************************************************/
#ifndef _SPL_SEG_KMEM_H
-#define _SPL_SEG_KMEM_H
+#define _SPL_SEG_KMEM_H
#include <sys/vmsystm.h>
$(top_srcdir)/config/Rules.am
subdir = lib
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/kernel-ctl-table-name.m4 \
+ $(top_srcdir)/config/kernel-fallocate.m4 \
+ $(top_srcdir)/config/kernel-group-info.m4 \
+ $(top_srcdir)/config/kernel-inode-lock.m4 \
+ $(top_srcdir)/config/kernel-kmem-cache.m4 \
+ $(top_srcdir)/config/kernel-kuidgid.m4 \
+ $(top_srcdir)/config/kernel-pde-data.m4 \
+ $(top_srcdir)/config/kernel-rw.m4 \
+ $(top_srcdir)/config/kernel-rwsem.m4 \
+ $(top_srcdir)/config/kernel-sched.m4 \
+ $(top_srcdir)/config/kernel-set-fs-pwd.m4 \
+ $(top_srcdir)/config/kernel-shrinker.m4 \
+ $(top_srcdir)/config/kernel-spinlock.m4 \
+ $(top_srcdir)/config/kernel-timer.m4 \
+ $(top_srcdir)/config/kernel-trim-unused-symbols.m4 \
+ $(top_srcdir)/config/kernel-truncate-range.m4 \
+ $(top_srcdir)/config/kernel-urange-sleep.m4 \
+ $(top_srcdir)/config/kernel-vfs-fsync.m4 \
+ $(top_srcdir)/config/kernel-vfs-getattr.m4 \
+ $(top_srcdir)/config/kernel-wait.m4 \
+ $(top_srcdir)/config/kernel-zlib.m4 \
+ $(top_srcdir)/config/libtool.m4 \
$(top_srcdir)/config/ltoptions.m4 \
$(top_srcdir)/config/ltsugar.m4 \
$(top_srcdir)/config/ltversion.m4 \
subdir = man
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/kernel-ctl-table-name.m4 \
+ $(top_srcdir)/config/kernel-fallocate.m4 \
+ $(top_srcdir)/config/kernel-group-info.m4 \
+ $(top_srcdir)/config/kernel-inode-lock.m4 \
+ $(top_srcdir)/config/kernel-kmem-cache.m4 \
+ $(top_srcdir)/config/kernel-kuidgid.m4 \
+ $(top_srcdir)/config/kernel-pde-data.m4 \
+ $(top_srcdir)/config/kernel-rw.m4 \
+ $(top_srcdir)/config/kernel-rwsem.m4 \
+ $(top_srcdir)/config/kernel-sched.m4 \
+ $(top_srcdir)/config/kernel-set-fs-pwd.m4 \
+ $(top_srcdir)/config/kernel-shrinker.m4 \
+ $(top_srcdir)/config/kernel-spinlock.m4 \
+ $(top_srcdir)/config/kernel-timer.m4 \
+ $(top_srcdir)/config/kernel-trim-unused-symbols.m4 \
+ $(top_srcdir)/config/kernel-truncate-range.m4 \
+ $(top_srcdir)/config/kernel-urange-sleep.m4 \
+ $(top_srcdir)/config/kernel-vfs-fsync.m4 \
+ $(top_srcdir)/config/kernel-vfs-getattr.m4 \
+ $(top_srcdir)/config/kernel-wait.m4 \
+ $(top_srcdir)/config/kernel-zlib.m4 \
+ $(top_srcdir)/config/libtool.m4 \
$(top_srcdir)/config/ltoptions.m4 \
$(top_srcdir)/config/ltsugar.m4 \
$(top_srcdir)/config/ltversion.m4 \
DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/kernel-ctl-table-name.m4 \
+ $(top_srcdir)/config/kernel-fallocate.m4 \
+ $(top_srcdir)/config/kernel-group-info.m4 \
+ $(top_srcdir)/config/kernel-inode-lock.m4 \
+ $(top_srcdir)/config/kernel-kmem-cache.m4 \
+ $(top_srcdir)/config/kernel-kuidgid.m4 \
+ $(top_srcdir)/config/kernel-pde-data.m4 \
+ $(top_srcdir)/config/kernel-rw.m4 \
+ $(top_srcdir)/config/kernel-rwsem.m4 \
+ $(top_srcdir)/config/kernel-sched.m4 \
+ $(top_srcdir)/config/kernel-set-fs-pwd.m4 \
+ $(top_srcdir)/config/kernel-shrinker.m4 \
+ $(top_srcdir)/config/kernel-spinlock.m4 \
+ $(top_srcdir)/config/kernel-timer.m4 \
+ $(top_srcdir)/config/kernel-trim-unused-symbols.m4 \
+ $(top_srcdir)/config/kernel-truncate-range.m4 \
+ $(top_srcdir)/config/kernel-urange-sleep.m4 \
+ $(top_srcdir)/config/kernel-vfs-fsync.m4 \
+ $(top_srcdir)/config/kernel-vfs-getattr.m4 \
+ $(top_srcdir)/config/kernel-wait.m4 \
+ $(top_srcdir)/config/kernel-zlib.m4 \
+ $(top_srcdir)/config/libtool.m4 \
$(top_srcdir)/config/ltoptions.m4 \
$(top_srcdir)/config/ltsugar.m4 \
$(top_srcdir)/config/ltversion.m4 \
DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/kernel-ctl-table-name.m4 \
+ $(top_srcdir)/config/kernel-fallocate.m4 \
+ $(top_srcdir)/config/kernel-group-info.m4 \
+ $(top_srcdir)/config/kernel-inode-lock.m4 \
+ $(top_srcdir)/config/kernel-kmem-cache.m4 \
+ $(top_srcdir)/config/kernel-kuidgid.m4 \
+ $(top_srcdir)/config/kernel-pde-data.m4 \
+ $(top_srcdir)/config/kernel-rw.m4 \
+ $(top_srcdir)/config/kernel-rwsem.m4 \
+ $(top_srcdir)/config/kernel-sched.m4 \
+ $(top_srcdir)/config/kernel-set-fs-pwd.m4 \
+ $(top_srcdir)/config/kernel-shrinker.m4 \
+ $(top_srcdir)/config/kernel-spinlock.m4 \
+ $(top_srcdir)/config/kernel-timer.m4 \
+ $(top_srcdir)/config/kernel-trim-unused-symbols.m4 \
+ $(top_srcdir)/config/kernel-truncate-range.m4 \
+ $(top_srcdir)/config/kernel-urange-sleep.m4 \
+ $(top_srcdir)/config/kernel-vfs-fsync.m4 \
+ $(top_srcdir)/config/kernel-vfs-getattr.m4 \
+ $(top_srcdir)/config/kernel-wait.m4 \
+ $(top_srcdir)/config/kernel-zlib.m4 \
+ $(top_srcdir)/config/libtool.m4 \
$(top_srcdir)/config/ltoptions.m4 \
$(top_srcdir)/config/ltsugar.m4 \
$(top_srcdir)/config/ltversion.m4 \
*
* You should have received a copy of the GNU General Public License along
* with the SPL. If not, see <http://www.gnu.org/licenses/>.
- *****************************************************************************
+ *
* Solaris Porting Layer (SPL) Atomic Implementation.
\*****************************************************************************/
#include <sys/atomic.h>
-#ifdef DEBUG_SUBSYSTEM
-#undef DEBUG_SUBSYSTEM
-#endif
-
-#define DEBUG_SUBSYSTEM S_ATOMIC
-
#ifdef ATOMIC_SPINLOCK
/* Global atomic lock declarations */
DEFINE_SPINLOCK(atomic32_lock);
}
EXPORT_SYMBOL(__cv_wait);
+void
+__cv_wait_io(kcondvar_t *cvp, kmutex_t *mp)
+{
+ cv_wait_common(cvp, mp, TASK_UNINTERRUPTIBLE, 1);
+}
+EXPORT_SYMBOL(__cv_wait_io);
+
void
__cv_wait_sig(kcondvar_t *cvp, kmutex_t *mp)
{
}
EXPORT_SYMBOL(__cv_wait_sig);
-void
-__cv_wait_io(kcondvar_t *cvp, kmutex_t *mp)
+#if defined(HAVE_IO_SCHEDULE_TIMEOUT)
+#define spl_io_schedule_timeout(t) io_schedule_timeout(t)
+#else
+static void
+__cv_wakeup(unsigned long data)
{
- cv_wait_common(cvp, mp, TASK_UNINTERRUPTIBLE, 1);
+ wake_up_process((struct task_struct *)data);
}
-EXPORT_SYMBOL(__cv_wait_io);
+
+static long
+spl_io_schedule_timeout(long time_left)
+{
+ long expire_time = jiffies + time_left;
+ struct timer_list timer;
+
+ init_timer(&timer);
+ setup_timer(&timer, __cv_wakeup, (unsigned long)current);
+ timer.expires = expire_time;
+ add_timer(&timer);
+
+ io_schedule();
+
+ del_timer_sync(&timer);
+ time_left = expire_time - jiffies;
+
+ return (time_left < 0 ? 0 : time_left);
+}
+#endif
/*
* 'expire_time' argument is an absolute wall clock time in jiffies.
*/
static clock_t
__cv_timedwait_common(kcondvar_t *cvp, kmutex_t *mp, clock_t expire_time,
- int state)
+ int state, int io)
{
DEFINE_WAIT(wait);
kmutex_t *m;
* race where 'cvp->cv_waiters > 0' but the list is empty.
*/
mutex_exit(mp);
- time_left = schedule_timeout(time_left);
+ if (io)
+ time_left = spl_io_schedule_timeout(time_left);
+ else
+ time_left = schedule_timeout(time_left);
/* No more waiters a different mutex could be used */
if (atomic_dec_and_test(&cvp->cv_waiters)) {
clock_t
__cv_timedwait(kcondvar_t *cvp, kmutex_t *mp, clock_t exp_time)
{
- return (__cv_timedwait_common(cvp, mp, exp_time, TASK_UNINTERRUPTIBLE));
+ return (__cv_timedwait_common(cvp, mp, exp_time,
+ TASK_UNINTERRUPTIBLE, 0));
}
EXPORT_SYMBOL(__cv_timedwait);
+clock_t
+__cv_timedwait_io(kcondvar_t *cvp, kmutex_t *mp, clock_t exp_time)
+{
+ return (__cv_timedwait_common(cvp, mp, exp_time,
+ TASK_UNINTERRUPTIBLE, 1));
+}
+EXPORT_SYMBOL(__cv_timedwait_io);
+
clock_t
__cv_timedwait_sig(kcondvar_t *cvp, kmutex_t *mp, clock_t exp_time)
{
- return (__cv_timedwait_common(cvp, mp, exp_time, TASK_INTERRUPTIBLE));
+ return (__cv_timedwait_common(cvp, mp, exp_time,
+ TASK_INTERRUPTIBLE, 0));
}
EXPORT_SYMBOL(__cv_timedwait_sig);
* Compatibility wrapper for the cv_timedwait_hires() Illumos interface.
*/
static clock_t
-cv_timedwait_hires_common(kcondvar_t *cvp, kmutex_t *mp, hrtime_t tim, hrtime_t res,
- int flag, int state)
+cv_timedwait_hires_common(kcondvar_t *cvp, kmutex_t *mp, hrtime_t tim,
+ hrtime_t res, int flag, int state)
{
if (res > 1) {
/*
EXPORT_SYMBOL(cv_timedwait_hires);
clock_t
-cv_timedwait_sig_hires(kcondvar_t *cvp, kmutex_t *mp, hrtime_t tim, hrtime_t res,
- int flag)
+cv_timedwait_sig_hires(kcondvar_t *cvp, kmutex_t *mp, hrtime_t tim,
+ hrtime_t res, int flag)
{
return (cv_timedwait_hires_common(cvp, mp, tim, res, flag,
TASK_INTERRUPTIBLE));
*
* You should have received a copy of the GNU General Public License along
* with the SPL. If not, see <http://www.gnu.org/licenses/>.
- *****************************************************************************
+ *
* Solaris Porting Layer (SPL) Credential Implementation.
\*****************************************************************************/
#include <sys/cred.h>
-#ifdef DEBUG_SUBSYSTEM
-#undef DEBUG_SUBSYSTEM
-#endif
-
-#define DEBUG_SUBSYSTEM S_CRED
-
static int
#ifdef HAVE_KUIDGID_T
cr_groups_search(const struct group_info *group_info, kgid_t grp)
int cmp;
if (!group_info)
- return 0;
+ return (0);
left = 0;
right = group_info->ngroups;
else if (cmp < 0)
right = mid;
else
- return 1;
+ return (1);
}
- return 0;
+ return (0);
}
/* Hold a reference on the credential */
void
crhold(cred_t *cr)
{
- (void)get_cred((const cred_t *)cr);
+ (void) get_cred((const cred_t *)cr);
}
/* Free a reference on the credential */
rc = NGROUPS_PER_BLOCK;
}
#endif
- return rc;
+ return (rc);
}
/*
if (gi->nblocks > 0)
gids = KGIDP_TO_SGIDP(gi->blocks[0]);
#endif
- return gids;
+ return (gids);
}
/* Check if the passed gid is available in supplied credential. */
gi = cr->group_info;
rc = cr_groups_search(gi, SGID_TO_KGID(gid));
- return rc;
+ return (rc);
}
/* Return the effective user id */
uid_t
crgetuid(const cred_t *cr)
{
- return KUID_TO_SUID(cr->euid);
+ return (KUID_TO_SUID(cr->euid));
}
/* Return the real user id */
uid_t
crgetruid(const cred_t *cr)
{
- return KUID_TO_SUID(cr->uid);
+ return (KUID_TO_SUID(cr->uid));
}
/* Return the saved user id */
uid_t
crgetsuid(const cred_t *cr)
{
- return KUID_TO_SUID(cr->suid);
+ return (KUID_TO_SUID(cr->suid));
}
/* Return the filesystem user id */
uid_t
crgetfsuid(const cred_t *cr)
{
- return KUID_TO_SUID(cr->fsuid);
+ return (KUID_TO_SUID(cr->fsuid));
}
/* Return the effective group id */
gid_t
crgetgid(const cred_t *cr)
{
- return KGID_TO_SGID(cr->egid);
+ return (KGID_TO_SGID(cr->egid));
}
/* Return the real group id */
gid_t
crgetrgid(const cred_t *cr)
{
- return KGID_TO_SGID(cr->gid);
+ return (KGID_TO_SGID(cr->gid));
}
/* Return the saved group id */
gid_t
crgetsgid(const cred_t *cr)
{
- return KGID_TO_SGID(cr->sgid);
+ return (KGID_TO_SGID(cr->sgid));
}
/* Return the filesystem group id */
gid_t
crgetfsgid(const cred_t *cr)
{
- return KGID_TO_SGID(cr->fsgid);
+ return (KGID_TO_SGID(cr->fsgid));
}
EXPORT_SYMBOL(crhold);
*
* You should have received a copy of the GNU General Public License along
* with the SPL. If not, see <http://www.gnu.org/licenses/>.
- *****************************************************************************
+ *
* Solaris Porting Layer (SPL) Error Implementation.
\*****************************************************************************/
* analysis and other such goodies.
* But we would still default to the current default of not to do that.
*/
+/* BEGIN CSTYLED */
unsigned int spl_panic_halt;
module_param(spl_panic_halt, uint, 0644);
-MODULE_PARM_DESC(spl_panic_halt,
- "Cause kernel panic on assertion failures");
+MODULE_PARM_DESC(spl_panic_halt, "Cause kernel panic on assertion failures");
+/* END CSTYLED */
/*
* Limit the number of stack traces dumped to not more than 5 every
EXPORT_SYMBOL(spl_dumpstack);
int
-spl_panic(const char *file, const char *func, int line, const char *fmt, ...) {
+spl_panic(const char *file, const char *func, int line, const char *fmt, ...)
+{
const char *newfile;
char msg[MAXMSGLEN];
va_list ap;
*
* You should have received a copy of the GNU General Public License along
* with the SPL. If not, see <http://www.gnu.org/licenses/>.
- *****************************************************************************
+ *
* Solaris Porting Layer (SPL) Generic Implementation.
\*****************************************************************************/
char spl_version[32] = "SPL v" SPL_META_VERSION "-" SPL_META_RELEASE;
EXPORT_SYMBOL(spl_version);
+/* BEGIN CSTYLED */
unsigned long spl_hostid = 0;
EXPORT_SYMBOL(spl_hostid);
module_param(spl_hostid, ulong, 0644);
MODULE_PARM_DESC(spl_hostid, "The system hostid.");
+/* END CSTYLED */
proc_t p0;
EXPORT_SYMBOL(p0);
*/
static inline uint64_t
-spl_rand_next(uint64_t *s) {
+spl_rand_next(uint64_t *s)
+{
uint64_t s1 = s[0];
const uint64_t s0 = s[1];
s[0] = s0;
}
static inline void
-spl_rand_jump(uint64_t *s) {
- static const uint64_t JUMP[] = { 0x8a5cd789635d2dff, 0x121fd2155c472f96 };
+spl_rand_jump(uint64_t *s)
+{
+ static const uint64_t JUMP[] =
+ { 0x8a5cd789635d2dff, 0x121fd2155c472f96 };
uint64_t s0 = 0;
uint64_t s1 = 0;
int i, b;
- for(i = 0; i < sizeof JUMP / sizeof *JUMP; i++)
- for(b = 0; b < 64; b++) {
+ for (i = 0; i < sizeof (JUMP) / sizeof (*JUMP); i++)
+ for (b = 0; b < 64; b++) {
if (JUMP[i] & 1ULL << b) {
s0 ^= s[0];
s1 ^= s[1];
* Calculate number of leading of zeros for a 64-bit value.
*/
static int
-nlz64(uint64_t x) {
+nlz64(uint64_t x)
+{
register int n = 0;
if (x == 0)
- return 64;
+ return (64);
- if (x <= 0x00000000FFFFFFFFULL) {n = n + 32; x = x << 32;}
- if (x <= 0x0000FFFFFFFFFFFFULL) {n = n + 16; x = x << 16;}
- if (x <= 0x00FFFFFFFFFFFFFFULL) {n = n + 8; x = x << 8;}
- if (x <= 0x0FFFFFFFFFFFFFFFULL) {n = n + 4; x = x << 4;}
- if (x <= 0x3FFFFFFFFFFFFFFFULL) {n = n + 2; x = x << 2;}
- if (x <= 0x7FFFFFFFFFFFFFFFULL) {n = n + 1;}
+ if (x <= 0x00000000FFFFFFFFULL) { n = n + 32; x = x << 32; }
+ if (x <= 0x0000FFFFFFFFFFFFULL) { n = n + 16; x = x << 16; }
+ if (x <= 0x00FFFFFFFFFFFFFFULL) { n = n + 8; x = x << 8; }
+ if (x <= 0x0FFFFFFFFFFFFFFFULL) { n = n + 4; x = x << 4; }
+ if (x <= 0x3FFFFFFFFFFFFFFFULL) { n = n + 2; x = x << 2; }
+ if (x <= 0x7FFFFFFFFFFFFFFFULL) { n = n + 1; }
- return n;
+ return (n);
}
/*
__div_u64(uint64_t u, uint32_t v)
{
(void) do_div(u, v);
- return u;
+ return (u);
}
/*
if (v >> 32 == 0) { // If v < 2**32:
if (u >> 32 < v) { // If u/v cannot overflow,
- return __div_u64(u, v); // just do one division.
+ return (__div_u64(u, v)); // just do one division.
} else { // If u/v would overflow:
u1 = u >> 32; // Break u into two halves.
u0 = u & 0xFFFFFFFF;
k = u1 - q1 * v; // First remainder, < v.
u0 += (k << 32);
q0 = __div_u64(u0, v); // Seconds quotient digit.
- return (q1 << 32) + q0;
+ return ((q1 << 32) + q0);
}
} else { // If v >= 2**32:
n = nlz64(v); // 0 <= n <= 31.
if ((u - q0 * v) >= v)
q0 = q0 + 1; // Now q0 is correct.
- return q0;
+ return (q0);
}
}
EXPORT_SYMBOL(__udivdi3);
int64_t q, t;
q = __udivdi3(abs64(u), abs64(v));
t = (u ^ v) >> 63; // If u, v have different
- return (q ^ t) - t; // signs, negate q.
+ return ((q ^ t) - t); // signs, negate q.
}
EXPORT_SYMBOL(__divdi3);
register uint32_t r2 asm("r2") = (mod & 0xFFFFFFFF);
register uint32_t r3 asm("r3") = (mod >> 32);
+ /* BEGIN CSTYLED */
asm volatile(""
: "+r"(r0), "+r"(r1), "+r"(r2),"+r"(r3) /* output */
: "r"(r0), "r"(r1), "r"(r2), "r"(r3)); /* input */
+ /* END CSTYLED */
return; /* r0; */
}
register uint32_t r2 asm("r2") = (mod & 0xFFFFFFFF);
register uint32_t r3 asm("r3") = (mod >> 32);
+ /* BEGIN CSTYLED */
asm volatile(""
: "+r"(r0), "+r"(r1), "+r"(r2),"+r"(r3) /* output */
: "r"(r0), "r"(r1), "r"(r2), "r"(r3)); /* input */
+ /* END CSTYLED */
return; /* r0; */
}
#endif /* __arm || __arm__ */
#endif /* BITS_PER_LONG */
-/* NOTE: The strtoxx behavior is solely based on my reading of the Solaris
+/*
+ * NOTE: The strtoxx behavior is solely based on my reading of the Solaris
* ddi_strtol(9F) man page. I have not verified the behavior of these
* functions against their Solaris counterparts. It is possible that I
* may have misinterpreted the man page or the man page is incorrect.
int ddi_strtoull(const char *, char **, int, unsigned long long *);
int ddi_strtoll(const char *, char **, int, long long *);
-#define define_ddi_strtoux(type, valtype) \
+#define define_ddi_strtoux(type, valtype) \
int ddi_strtou##type(const char *str, char **endptr, \
- int base, valtype *result) \
+ int base, valtype *result) \
{ \
valtype last_value, value = 0; \
char *ptr = (char *)str; \
int flag = 1, digit; \
\
if (strlen(ptr) == 0) \
- return EINVAL; \
+ return (EINVAL); \
\
/* Auto-detect base based on prefix */ \
if (!base) { \
if (str[0] == '0') { \
- if (tolower(str[1])=='x' && isxdigit(str[2])) { \
+ if (tolower(str[1]) == 'x' && isxdigit(str[2])) { \
base = 16; /* hex */ \
ptr += 2; \
} else if (str[1] >= '0' && str[1] < 8) { \
base = 8; /* octal */ \
ptr += 1; \
} else { \
- return EINVAL; \
+ return (EINVAL); \
} \
} else { \
base = 10; /* decimal */ \
last_value = value; \
value = value * base + digit; \
if (last_value > value) /* Overflow */ \
- return ERANGE; \
+ return (ERANGE); \
\
flag = 1; \
ptr++; \
if (endptr) \
*endptr = (char *)(flag ? ptr : str); \
\
- return 0; \
+ return (0); \
} \
-#define define_ddi_strtox(type, valtype) \
+#define define_ddi_strtox(type, valtype) \
int ddi_strto##type(const char *str, char **endptr, \
- int base, valtype *result) \
+ int base, valtype *result) \
{ \
int rc; \
\
rc = ddi_strtou##type(str, endptr, base, result); \
} \
\
- return rc; \
+ return (rc); \
}
define_ddi_strtoux(l, unsigned long)
/* Fake ioctl() issued by kernel, 'from' is a kernel address */
if (flags & FKIOCTL) {
memcpy(to, from, len);
- return 0;
+ return (0);
}
- return copyin(from, to, len);
+ return (copyin(from, to, len));
}
EXPORT_SYMBOL(ddi_copyin);
/* Fake ioctl() issued by kernel, 'from' is a kernel address */
if (flags & FKIOCTL) {
memcpy(to, from, len);
- return 0;
+ return (0);
}
- return copyout(from, to, len);
+ return (copyout(from, to, len));
}
EXPORT_SYMBOL(ddi_copyout);
return (error);
}
- if (size < sizeof(HW_HOSTID_MASK)) {
+ if (size < sizeof (HW_HOSTID_MASK)) {
kobj_close_file(file);
return (EINVAL);
}
* Read directly into the variable like eglibc does.
* Short reads are okay; native behavior is preserved.
*/
- error = kobj_read_file(file, (char *)&value, sizeof(value), 0);
+ error = kobj_read_file(file, (char *)&value, sizeof (value), 0);
if (error < 0) {
kobj_close_file(file);
return (EIO);
*hostid = (value & HW_HOSTID_MASK);
kobj_close_file(file);
- return 0;
+ return (0);
}
/*
goto out10;
printk(KERN_NOTICE "SPL: Loaded module v%s-%s%s\n", SPL_META_VERSION,
- SPL_META_RELEASE, SPL_DEBUG_STR);
+ SPL_META_RELEASE, SPL_DEBUG_STR);
return (rc);
out10:
spl_kvmem_fini();
out1:
printk(KERN_NOTICE "SPL: Failed to Load Solaris Porting Layer "
- "v%s-%s%s, rc = %d\n", SPL_META_VERSION, SPL_META_RELEASE,
- SPL_DEBUG_STR, rc);
+ "v%s-%s%s, rc = %d\n", SPL_META_VERSION, SPL_META_RELEASE,
+ SPL_DEBUG_STR, rc);
return (rc);
}
spl_fini(void)
{
printk(KERN_NOTICE "SPL: Unloaded module v%s-%s%s\n",
- SPL_META_VERSION, SPL_META_RELEASE, SPL_DEBUG_STR);
+ SPL_META_VERSION, SPL_META_RELEASE, SPL_DEBUG_STR);
spl_zlib_fini();
spl_kstat_fini();
spl_proc_fini();
* because it has been shown to improve responsiveness on low memory systems.
* This policy may be changed by setting KMC_EXPIRE_AGE or KMC_EXPIRE_MEM.
*/
+/* BEGIN CSTYLED */
unsigned int spl_kmem_cache_expire = KMC_EXPIRE_MEM;
EXPORT_SYMBOL(spl_kmem_cache_expire);
module_param(spl_kmem_cache_expire, uint, 0644);
* have been deemed costly by the kernel.
*/
unsigned int spl_kmem_cache_kmem_limit =
- ((1 << (PAGE_ALLOC_COSTLY_ORDER - 1)) * PAGE_SIZE) /
- SPL_KMEM_CACHE_OBJ_PER_SLAB;
+ ((1 << (PAGE_ALLOC_COSTLY_ORDER - 1)) * PAGE_SIZE) /
+ SPL_KMEM_CACHE_OBJ_PER_SLAB;
module_param(spl_kmem_cache_kmem_limit, uint, 0644);
MODULE_PARM_DESC(spl_kmem_cache_kmem_limit,
"Objects less than N bytes use the kmalloc");
module_param(spl_kmem_cache_kmem_threads, uint, 0444);
MODULE_PARM_DESC(spl_kmem_cache_kmem_threads,
"Number of spl_kmem_cache threads");
+/* END CSTYLED */
/*
* Slab allocation interfaces
if (rc) {
if (skc->skc_flags & KMC_OFFSLAB)
list_for_each_entry_safe(sko,
- n, &sks->sks_free_list, sko_list)
+ n, &sks->sks_free_list, sko_list) {
kv_free(skc, sko->sko_addr, offslab_size);
+ }
kv_free(skc, base, skc->skc_slab_size);
sks = NULL;
skc = sks->sks_cache;
ASSERT(skc->skc_magic == SKC_MAGIC);
- ASSERT(spin_is_locked(&skc->skc_lock));
/*
* Update slab/objects counters in the cache, then remove the
ASSERT(skc->skc_magic == SKC_MAGIC);
ASSERT(skm->skm_magic == SKM_MAGIC);
- ASSERT(spin_is_locked(&skc->skc_lock));
for (i = 0; i < count; i++)
spl_cache_shrink(skc, skm->skm_objs[i]);
#endif
#if defined(HAVE_KMEM_CACHE_CREATE_USERCOPY)
- /*
- * Newer grsec patchset uses kmem_cache_create_usercopy()
- * instead of SLAB_USERCOPY flag
- */
- skc->skc_linux_cache = kmem_cache_create_usercopy(
- skc->skc_name, size, align, slabflags, 0, size, NULL);
+ /*
+ * Newer grsec patchset uses kmem_cache_create_usercopy()
+ * instead of SLAB_USERCOPY flag
+ */
+ skc->skc_linux_cache = kmem_cache_create_usercopy(
+ skc->skc_name, size, align, slabflags, 0, size, NULL);
#else
- skc->skc_linux_cache = kmem_cache_create(
- skc->skc_name, size, align, slabflags, NULL);
+ skc->skc_linux_cache = kmem_cache_create(
+ skc->skc_name, size, align, slabflags, NULL);
#endif
if (skc->skc_linux_cache == NULL) {
rc = ENOMEM;
ASSERT(skc->skc_magic == SKC_MAGIC);
ASSERT(sks->sks_magic == SKS_MAGIC);
- ASSERT(spin_is_locked(&skc->skc_lock));
sko = list_entry(sks->sks_free_list.next, spl_kmem_obj_t, sko_list);
ASSERT(sko->sko_magic == SKO_MAGIC);
spl_kmem_alloc_t *ska = (spl_kmem_alloc_t *)data;
spl_kmem_cache_t *skc = ska->ska_cache;
- (void)__spl_cache_grow(skc, ska->ska_flags);
+ (void) __spl_cache_grow(skc, ska->ska_flags);
atomic_dec(&skc->skc_ref);
smp_mb__before_atomic();
spl_kmem_obj_t *sko = NULL;
ASSERT(skc->skc_magic == SKC_MAGIC);
- ASSERT(spin_is_locked(&skc->skc_lock));
sko = spl_sko_from_obj(skc, obj);
ASSERT(sko->sko_magic == SKO_MAGIC);
* allocations are quickly caught. These warnings may be disabled by setting
* the threshold to zero.
*/
+/* BEGIN CSTYLED */
unsigned int spl_kmem_alloc_warn = MIN(16 * PAGE_SIZE, 64 * 1024);
module_param(spl_kmem_alloc_warn, uint, 0644);
MODULE_PARM_DESC(spl_kmem_alloc_warn,
MODULE_PARM_DESC(spl_kmem_alloc_max,
"Maximum size in bytes for a kmem_alloc()");
EXPORT_SYMBOL(spl_kmem_alloc_max);
+/* END CSTYLED */
int
kmem_debugging(void)
{
kmem_debug_t *dptr;
- /* Ignore NULL pointer since we haven't tracked it at all*/
+ /* Ignore NULL pointer since we haven't tracked it at all */
if (ptr == NULL)
return;
printk(KERN_WARNING "%-16s %-5s %-16s %s:%s\n", "address",
"size", "data", "func", "line");
- list_for_each_entry(kd, list, kd_list)
+ list_for_each_entry(kd, list, kd_list) {
printk(KERN_WARNING "%p %-5d %-16s %s:%d\n", kd->kd_addr,
(int)kd->kd_size, spl_sprintf_addr(kd, str, 17, 8),
kd->kd_func, kd->kd_line);
+ }
spin_unlock_irqrestore(lock, flags);
}
*
* You should have received a copy of the GNU General Public License along
* with the SPL. If not, see <http://www.gnu.org/licenses/>.
- *****************************************************************************
+ *
* Solaris Porting Layer (SPL) Kobj Implementation.
\*****************************************************************************/
vnode_t *vp;
int rc;
- file = kmalloc(sizeof(_buf_t), kmem_flags_convert(KM_SLEEP));
+ file = kmalloc(sizeof (_buf_t), kmem_flags_convert(KM_SLEEP));
if (file == NULL)
return ((_buf_t *)-1UL);
kobj_close_file(struct _buf *file)
{
VOP_CLOSE(file->vp, 0, 0, 0, 0, 0);
- kfree(file);
+ kfree(file);
} /* kobj_close_file() */
EXPORT_SYMBOL(kobj_close_file);
int
kobj_get_filesize(struct _buf *file, uint64_t *size)
{
- vattr_t vap;
+ vattr_t vap;
int rc;
rc = VOP_GETATTR(file->vp, &vap, 0, 0, NULL);
if (rc)
return (rc);
- *size = vap.va_size;
+ *size = vap.va_size;
- return (rc);
+ return (rc);
} /* kobj_get_filesize() */
EXPORT_SYMBOL(kobj_get_filesize);
*
* You should have received a copy of the GNU General Public License along
* with the SPL. If not, see <http://www.gnu.org/licenses/>.
- *****************************************************************************
+ *
* Solaris Porting Layer (SPL) Kstat Implementation.
\*****************************************************************************/
#include <sys/cmn_err.h>
#ifndef HAVE_PDE_DATA
-#define PDE_DATA(x) (PDE(x)->data)
+#define PDE_DATA(x) (PDE(x)->data)
#endif
static kmutex_t kstat_module_lock;
kstat_resize_raw(kstat_t *ksp)
{
if (ksp->ks_raw_bufsize == KSTAT_RAW_MAX)
- return ENOMEM;
+ return (ENOMEM);
vmem_free(ksp->ks_raw_buf, ksp->ks_raw_bufsize);
ksp->ks_raw_bufsize = MIN(ksp->ks_raw_bufsize * 2, KSTAT_RAW_MAX);
ksp->ks_raw_buf = vmem_alloc(ksp->ks_raw_bufsize, KM_SLEEP);
- return 0;
+ return (0);
}
void
static int
kstat_seq_show_headers(struct seq_file *f)
{
- kstat_t *ksp = (kstat_t *)f->private;
+ kstat_t *ksp = (kstat_t *)f->private;
int rc = 0;
- ASSERT(ksp->ks_magic == KS_MAGIC);
+ ASSERT(ksp->ks_magic == KS_MAGIC);
- seq_printf(f, "%d %d 0x%02x %d %d %lld %lld\n",
- ksp->ks_kid, ksp->ks_type, ksp->ks_flags,
- ksp->ks_ndata, (int)ksp->ks_data_size,
- ksp->ks_crtime, ksp->ks_snaptime);
+ seq_printf(f, "%d %d 0x%02x %d %d %lld %lld\n",
+ ksp->ks_kid, ksp->ks_type, ksp->ks_flags,
+ ksp->ks_ndata, (int)ksp->ks_data_size,
+ ksp->ks_crtime, ksp->ks_snaptime);
switch (ksp->ks_type) {
- case KSTAT_TYPE_RAW:
+ case KSTAT_TYPE_RAW:
restart:
- if (ksp->ks_raw_ops.headers) {
- rc = ksp->ks_raw_ops.headers(
- ksp->ks_raw_buf, ksp->ks_raw_bufsize);
+ if (ksp->ks_raw_ops.headers) {
+ rc = ksp->ks_raw_ops.headers(
+ ksp->ks_raw_buf, ksp->ks_raw_bufsize);
if (rc == ENOMEM && !kstat_resize_raw(ksp))
goto restart;
if (!rc)
- seq_puts(f, ksp->ks_raw_buf);
- } else {
- seq_printf(f, "raw data\n");
- }
- break;
- case KSTAT_TYPE_NAMED:
- seq_printf(f, "%-31s %-4s %s\n",
- "name", "type", "data");
- break;
- case KSTAT_TYPE_INTR:
- seq_printf(f, "%-8s %-8s %-8s %-8s %-8s\n",
- "hard", "soft", "watchdog",
- "spurious", "multsvc");
- break;
- case KSTAT_TYPE_IO:
- seq_printf(f,
- "%-8s %-8s %-8s %-8s %-8s %-8s "
- "%-8s %-8s %-8s %-8s %-8s %-8s\n",
- "nread", "nwritten", "reads", "writes",
- "wtime", "wlentime", "wupdate",
- "rtime", "rlentime", "rupdate",
- "wcnt", "rcnt");
- break;
- case KSTAT_TYPE_TIMER:
- seq_printf(f,
- "%-31s %-8s "
- "%-8s %-8s %-8s %-8s %-8s\n",
- "name", "events", "elapsed",
- "min", "max", "start", "stop");
- break;
- default:
- PANIC("Undefined kstat type %d\n", ksp->ks_type);
- }
-
- return -rc;
+ seq_puts(f, ksp->ks_raw_buf);
+ } else {
+ seq_printf(f, "raw data\n");
+ }
+ break;
+ case KSTAT_TYPE_NAMED:
+ seq_printf(f, "%-31s %-4s %s\n",
+ "name", "type", "data");
+ break;
+ case KSTAT_TYPE_INTR:
+ seq_printf(f, "%-8s %-8s %-8s %-8s %-8s\n",
+ "hard", "soft", "watchdog",
+ "spurious", "multsvc");
+ break;
+ case KSTAT_TYPE_IO:
+ seq_printf(f,
+ "%-8s %-8s %-8s %-8s %-8s %-8s "
+ "%-8s %-8s %-8s %-8s %-8s %-8s\n",
+ "nread", "nwritten", "reads", "writes",
+ "wtime", "wlentime", "wupdate",
+ "rtime", "rlentime", "rupdate",
+ "wcnt", "rcnt");
+ break;
+ case KSTAT_TYPE_TIMER:
+ seq_printf(f,
+ "%-31s %-8s "
+ "%-8s %-8s %-8s %-8s %-8s\n",
+ "name", "events", "elapsed",
+ "min", "max", "start", "stop");
+ break;
+ default:
+ PANIC("Undefined kstat type %d\n", ksp->ks_type);
+ }
+
+ return (-rc);
}
static int
kstat_seq_show_raw(struct seq_file *f, unsigned char *p, int l)
{
- int i, j;
+ int i, j;
- for (i = 0; ; i++) {
- seq_printf(f, "%03x:", i);
+ for (i = 0; ; i++) {
+ seq_printf(f, "%03x:", i);
- for (j = 0; j < 16; j++) {
- if (i * 16 + j >= l) {
- seq_printf(f, "\n");
- goto out;
- }
+ for (j = 0; j < 16; j++) {
+ if (i * 16 + j >= l) {
+ seq_printf(f, "\n");
+ goto out;
+ }
- seq_printf(f, " %02x", (unsigned char)p[i * 16 + j]);
- }
- seq_printf(f, "\n");
- }
+ seq_printf(f, " %02x", (unsigned char)p[i * 16 + j]);
+ }
+ seq_printf(f, "\n");
+ }
out:
- return 0;
+ return (0);
}
static int
kstat_seq_show_named(struct seq_file *f, kstat_named_t *knp)
{
- seq_printf(f, "%-31s %-4d ", knp->name, knp->data_type);
-
- switch (knp->data_type) {
- case KSTAT_DATA_CHAR:
- knp->value.c[15] = '\0'; /* NULL terminate */
- seq_printf(f, "%-16s", knp->value.c);
- break;
- /* XXX - We need to be more careful able what tokens are
- * used for each arch, for now this is correct for x86_64.
- */
- case KSTAT_DATA_INT32:
- seq_printf(f, "%d", knp->value.i32);
- break;
- case KSTAT_DATA_UINT32:
- seq_printf(f, "%u", knp->value.ui32);
- break;
- case KSTAT_DATA_INT64:
- seq_printf(f, "%lld", (signed long long)knp->value.i64);
- break;
- case KSTAT_DATA_UINT64:
- seq_printf(f, "%llu", (unsigned long long)knp->value.ui64);
- break;
- case KSTAT_DATA_LONG:
- seq_printf(f, "%ld", knp->value.l);
- break;
- case KSTAT_DATA_ULONG:
- seq_printf(f, "%lu", knp->value.ul);
- break;
- case KSTAT_DATA_STRING:
- KSTAT_NAMED_STR_PTR(knp)
- [KSTAT_NAMED_STR_BUFLEN(knp)-1] = '\0';
- seq_printf(f, "%s", KSTAT_NAMED_STR_PTR(knp));
- break;
- default:
- PANIC("Undefined kstat data type %d\n", knp->data_type);
- }
-
- seq_printf(f, "\n");
-
- return 0;
+ seq_printf(f, "%-31s %-4d ", knp->name, knp->data_type);
+
+ switch (knp->data_type) {
+ case KSTAT_DATA_CHAR:
+ knp->value.c[15] = '\0'; /* NULL terminate */
+ seq_printf(f, "%-16s", knp->value.c);
+ break;
+ /*
+ * NOTE - We need to be more careful able what tokens are
+ * used for each arch, for now this is correct for x86_64.
+ */
+ case KSTAT_DATA_INT32:
+ seq_printf(f, "%d", knp->value.i32);
+ break;
+ case KSTAT_DATA_UINT32:
+ seq_printf(f, "%u", knp->value.ui32);
+ break;
+ case KSTAT_DATA_INT64:
+ seq_printf(f, "%lld", (signed long long)knp->value.i64);
+ break;
+ case KSTAT_DATA_UINT64:
+ seq_printf(f, "%llu",
+ (unsigned long long)knp->value.ui64);
+ break;
+ case KSTAT_DATA_LONG:
+ seq_printf(f, "%ld", knp->value.l);
+ break;
+ case KSTAT_DATA_ULONG:
+ seq_printf(f, "%lu", knp->value.ul);
+ break;
+ case KSTAT_DATA_STRING:
+ KSTAT_NAMED_STR_PTR(knp)
+ [KSTAT_NAMED_STR_BUFLEN(knp)-1] = '\0';
+ seq_printf(f, "%s", KSTAT_NAMED_STR_PTR(knp));
+ break;
+ default:
+ PANIC("Undefined kstat data type %d\n", knp->data_type);
+ }
+
+ seq_printf(f, "\n");
+
+ return (0);
}
static int
kstat_seq_show_intr(struct seq_file *f, kstat_intr_t *kip)
{
- seq_printf(f, "%-8u %-8u %-8u %-8u %-8u\n",
- kip->intrs[KSTAT_INTR_HARD],
- kip->intrs[KSTAT_INTR_SOFT],
- kip->intrs[KSTAT_INTR_WATCHDOG],
- kip->intrs[KSTAT_INTR_SPURIOUS],
- kip->intrs[KSTAT_INTR_MULTSVC]);
-
- return 0;
+ seq_printf(f, "%-8u %-8u %-8u %-8u %-8u\n",
+ kip->intrs[KSTAT_INTR_HARD],
+ kip->intrs[KSTAT_INTR_SOFT],
+ kip->intrs[KSTAT_INTR_WATCHDOG],
+ kip->intrs[KSTAT_INTR_SPURIOUS],
+ kip->intrs[KSTAT_INTR_MULTSVC]);
+
+ return (0);
}
static int
kstat_seq_show_io(struct seq_file *f, kstat_io_t *kip)
{
- seq_printf(f,
- "%-8llu %-8llu %-8u %-8u %-8lld %-8lld "
- "%-8lld %-8lld %-8lld %-8lld %-8u %-8u\n",
- kip->nread, kip->nwritten,
- kip->reads, kip->writes,
- kip->wtime, kip->wlentime, kip->wlastupdate,
- kip->rtime, kip->rlentime, kip->rlastupdate,
- kip->wcnt, kip->rcnt);
-
- return 0;
+ seq_printf(f,
+ "%-8llu %-8llu %-8u %-8u %-8lld %-8lld "
+ "%-8lld %-8lld %-8lld %-8lld %-8u %-8u\n",
+ kip->nread, kip->nwritten,
+ kip->reads, kip->writes,
+ kip->wtime, kip->wlentime, kip->wlastupdate,
+ kip->rtime, kip->rlentime, kip->rlastupdate,
+ kip->wcnt, kip->rcnt);
+
+ return (0);
}
static int
kstat_seq_show_timer(struct seq_file *f, kstat_timer_t *ktp)
{
- seq_printf(f,
- "%-31s %-8llu %-8lld %-8lld %-8lld %-8lld %-8lld\n",
- ktp->name, ktp->num_events, ktp->elapsed_time,
- ktp->min_time, ktp->max_time,
- ktp->start_time, ktp->stop_time);
+ seq_printf(f,
+ "%-31s %-8llu %-8lld %-8lld %-8lld %-8lld %-8lld\n",
+ ktp->name, ktp->num_events, ktp->elapsed_time,
+ ktp->min_time, ktp->max_time,
+ ktp->start_time, ktp->stop_time);
- return 0;
+ return (0);
}
static int
kstat_seq_show(struct seq_file *f, void *p)
{
- kstat_t *ksp = (kstat_t *)f->private;
- int rc = 0;
+ kstat_t *ksp = (kstat_t *)f->private;
+ int rc = 0;
- ASSERT(ksp->ks_magic == KS_MAGIC);
+ ASSERT(ksp->ks_magic == KS_MAGIC);
switch (ksp->ks_type) {
- case KSTAT_TYPE_RAW:
+ case KSTAT_TYPE_RAW:
restart:
- if (ksp->ks_raw_ops.data) {
- rc = ksp->ks_raw_ops.data(
+ if (ksp->ks_raw_ops.data) {
+ rc = ksp->ks_raw_ops.data(
ksp->ks_raw_buf, ksp->ks_raw_bufsize, p);
if (rc == ENOMEM && !kstat_resize_raw(ksp))
goto restart;
if (!rc)
- seq_puts(f, ksp->ks_raw_buf);
- } else {
- ASSERT(ksp->ks_ndata == 1);
- rc = kstat_seq_show_raw(f, ksp->ks_data,
- ksp->ks_data_size);
- }
- break;
- case KSTAT_TYPE_NAMED:
- rc = kstat_seq_show_named(f, (kstat_named_t *)p);
- break;
- case KSTAT_TYPE_INTR:
- rc = kstat_seq_show_intr(f, (kstat_intr_t *)p);
- break;
- case KSTAT_TYPE_IO:
- rc = kstat_seq_show_io(f, (kstat_io_t *)p);
- break;
- case KSTAT_TYPE_TIMER:
- rc = kstat_seq_show_timer(f, (kstat_timer_t *)p);
- break;
- default:
- PANIC("Undefined kstat type %d\n", ksp->ks_type);
- }
-
- return -rc;
+ seq_puts(f, ksp->ks_raw_buf);
+ } else {
+ ASSERT(ksp->ks_ndata == 1);
+ rc = kstat_seq_show_raw(f, ksp->ks_data,
+ ksp->ks_data_size);
+ }
+ break;
+ case KSTAT_TYPE_NAMED:
+ rc = kstat_seq_show_named(f, (kstat_named_t *)p);
+ break;
+ case KSTAT_TYPE_INTR:
+ rc = kstat_seq_show_intr(f, (kstat_intr_t *)p);
+ break;
+ case KSTAT_TYPE_IO:
+ rc = kstat_seq_show_io(f, (kstat_io_t *)p);
+ break;
+ case KSTAT_TYPE_TIMER:
+ rc = kstat_seq_show_timer(f, (kstat_timer_t *)p);
+ break;
+ default:
+ PANIC("Undefined kstat type %d\n", ksp->ks_type);
+ }
+
+ return (-rc);
}
-int
+static int
kstat_default_update(kstat_t *ksp, int rw)
{
ASSERT(ksp != NULL);
if (rw == KSTAT_WRITE)
return (EACCES);
- return 0;
+ return (0);
}
static void *
kstat_seq_data_addr(kstat_t *ksp, loff_t n)
{
- void *rc = NULL;
+ void *rc = NULL;
switch (ksp->ks_type) {
- case KSTAT_TYPE_RAW:
- if (ksp->ks_raw_ops.addr)
- rc = ksp->ks_raw_ops.addr(ksp, n);
- else
- rc = ksp->ks_data;
- break;
- case KSTAT_TYPE_NAMED:
- rc = ksp->ks_data + n * sizeof(kstat_named_t);
- break;
- case KSTAT_TYPE_INTR:
- rc = ksp->ks_data + n * sizeof(kstat_intr_t);
- break;
- case KSTAT_TYPE_IO:
- rc = ksp->ks_data + n * sizeof(kstat_io_t);
- break;
- case KSTAT_TYPE_TIMER:
- rc = ksp->ks_data + n * sizeof(kstat_timer_t);
- break;
- default:
- PANIC("Undefined kstat type %d\n", ksp->ks_type);
- }
-
- return (rc);
+ case KSTAT_TYPE_RAW:
+ if (ksp->ks_raw_ops.addr)
+ rc = ksp->ks_raw_ops.addr(ksp, n);
+ else
+ rc = ksp->ks_data;
+ break;
+ case KSTAT_TYPE_NAMED:
+ rc = ksp->ks_data + n * sizeof (kstat_named_t);
+ break;
+ case KSTAT_TYPE_INTR:
+ rc = ksp->ks_data + n * sizeof (kstat_intr_t);
+ break;
+ case KSTAT_TYPE_IO:
+ rc = ksp->ks_data + n * sizeof (kstat_io_t);
+ break;
+ case KSTAT_TYPE_TIMER:
+ rc = ksp->ks_data + n * sizeof (kstat_timer_t);
+ break;
+ default:
+ PANIC("Undefined kstat type %d\n", ksp->ks_type);
+ }
+
+ return (rc);
}
static void *
kstat_seq_start(struct seq_file *f, loff_t *pos)
{
- loff_t n = *pos;
- kstat_t *ksp = (kstat_t *)f->private;
- ASSERT(ksp->ks_magic == KS_MAGIC);
+ loff_t n = *pos;
+ kstat_t *ksp = (kstat_t *)f->private;
+ ASSERT(ksp->ks_magic == KS_MAGIC);
mutex_enter(ksp->ks_lock);
- if (ksp->ks_type == KSTAT_TYPE_RAW) {
- ksp->ks_raw_bufsize = PAGE_SIZE;
- ksp->ks_raw_buf = vmem_alloc(ksp->ks_raw_bufsize, KM_SLEEP);
- }
+ if (ksp->ks_type == KSTAT_TYPE_RAW) {
+ ksp->ks_raw_bufsize = PAGE_SIZE;
+ ksp->ks_raw_buf = vmem_alloc(ksp->ks_raw_bufsize, KM_SLEEP);
+ }
- /* Dynamically update kstat, on error existing kstats are used */
- (void) ksp->ks_update(ksp, KSTAT_READ);
+ /* Dynamically update kstat, on error existing kstats are used */
+ (void) ksp->ks_update(ksp, KSTAT_READ);
ksp->ks_snaptime = gethrtime();
- if (!n && kstat_seq_show_headers(f))
+ if (!n && kstat_seq_show_headers(f))
return (NULL);
- if (n >= ksp->ks_ndata)
- return (NULL);
+ if (n >= ksp->ks_ndata)
+ return (NULL);
- return (kstat_seq_data_addr(ksp, n));
+ return (kstat_seq_data_addr(ksp, n));
}
static void *
kstat_seq_next(struct seq_file *f, void *p, loff_t *pos)
{
- kstat_t *ksp = (kstat_t *)f->private;
- ASSERT(ksp->ks_magic == KS_MAGIC);
+ kstat_t *ksp = (kstat_t *)f->private;
+ ASSERT(ksp->ks_magic == KS_MAGIC);
- ++*pos;
- if (*pos >= ksp->ks_ndata)
- return (NULL);
+ ++*pos;
+ if (*pos >= ksp->ks_ndata)
+ return (NULL);
- return (kstat_seq_data_addr(ksp, *pos));
+ return (kstat_seq_data_addr(ksp, *pos));
}
static void
}
static struct seq_operations kstat_seq_ops = {
- .show = kstat_seq_show,
- .start = kstat_seq_start,
- .next = kstat_seq_next,
- .stop = kstat_seq_stop,
+ .show = kstat_seq_show,
+ .start = kstat_seq_start,
+ .next = kstat_seq_next,
+ .stop = kstat_seq_stop,
};
static kstat_module_t *
{
kstat_module_t *module;
- list_for_each_entry(module, &kstat_module_list, ksm_module_list)
+ list_for_each_entry(module, &kstat_module_list, ksm_module_list) {
if (strncmp(name, module->ksm_name, KSTAT_STRLEN) == 0)
return (module);
+ }
return (NULL);
}
ASSERT(list_empty(&module->ksm_kstat_list));
remove_proc_entry(module->ksm_name, proc_spl_kstat);
list_del(&module->ksm_module_list);
- kmem_free(module, sizeof(kstat_module_t));
+ kmem_free(module, sizeof (kstat_module_t));
}
static int
proc_kstat_open(struct inode *inode, struct file *filp)
{
- struct seq_file *f;
- int rc;
+ struct seq_file *f;
+ int rc;
- rc = seq_open(filp, &kstat_seq_ops);
- if (rc)
- return rc;
+ rc = seq_open(filp, &kstat_seq_ops);
+ if (rc)
+ return (rc);
- f = filp->private_data;
- f->private = PDE_DATA(inode);
+ f = filp->private_data;
+ f->private = PDE_DATA(inode);
- return rc;
+ return (rc);
}
static ssize_t
-proc_kstat_write(struct file *filp, const char __user *buf,
- size_t len, loff_t *ppos)
+proc_kstat_write(struct file *filp, const char __user *buf, size_t len,
+ loff_t *ppos)
{
struct seq_file *f = filp->private_data;
kstat_t *ksp = f->private;
void
__kstat_set_raw_ops(kstat_t *ksp,
- int (*headers)(char *buf, size_t size),
- int (*data)(char *buf, size_t size, void *data),
- void *(*addr)(kstat_t *ksp, loff_t index))
+ int (*headers)(char *buf, size_t size),
+ int (*data)(char *buf, size_t size, void *data),
+ void *(*addr)(kstat_t *ksp, loff_t index))
{
ksp->ks_raw_ops.headers = headers;
ksp->ks_raw_ops.data = data;
kstat_t *
__kstat_create(const char *ks_module, int ks_instance, const char *ks_name,
- const char *ks_class, uchar_t ks_type, uint_t ks_ndata,
- uchar_t ks_flags)
+ const char *ks_class, uchar_t ks_type, uint_t ks_ndata,
+ uchar_t ks_flags)
{
kstat_t *ksp;
ASSERT(!(ks_flags & KSTAT_FLAG_UNSUPPORTED));
if ((ks_type == KSTAT_TYPE_INTR) || (ks_type == KSTAT_TYPE_IO))
- ASSERT(ks_ndata == 1);
+ ASSERT(ks_ndata == 1);
- ksp = kmem_zalloc(sizeof(*ksp), KM_SLEEP);
+ ksp = kmem_zalloc(sizeof (*ksp), KM_SLEEP);
if (ksp == NULL)
- return ksp;
+ return (ksp);
mutex_enter(&kstat_module_lock);
ksp->ks_kid = kstat_id;
- kstat_id++;
+ kstat_id++;
mutex_exit(&kstat_module_lock);
- ksp->ks_magic = KS_MAGIC;
+ ksp->ks_magic = KS_MAGIC;
mutex_init(&ksp->ks_private_lock, NULL, MUTEX_DEFAULT, NULL);
ksp->ks_lock = &ksp->ks_private_lock;
INIT_LIST_HEAD(&ksp->ks_list);
ksp->ks_crtime = gethrtime();
- ksp->ks_snaptime = ksp->ks_crtime;
+ ksp->ks_snaptime = ksp->ks_crtime;
strncpy(ksp->ks_module, ks_module, KSTAT_STRLEN);
ksp->ks_instance = ks_instance;
strncpy(ksp->ks_name, ks_name, KSTAT_STRLEN);
ksp->ks_raw_bufsize = 0;
switch (ksp->ks_type) {
- case KSTAT_TYPE_RAW:
- ksp->ks_ndata = 1;
- ksp->ks_data_size = ks_ndata;
- break;
- case KSTAT_TYPE_NAMED:
- ksp->ks_ndata = ks_ndata;
- ksp->ks_data_size = ks_ndata * sizeof(kstat_named_t);
- break;
- case KSTAT_TYPE_INTR:
- ksp->ks_ndata = ks_ndata;
- ksp->ks_data_size = ks_ndata * sizeof(kstat_intr_t);
- break;
- case KSTAT_TYPE_IO:
- ksp->ks_ndata = ks_ndata;
- ksp->ks_data_size = ks_ndata * sizeof(kstat_io_t);
- break;
- case KSTAT_TYPE_TIMER:
- ksp->ks_ndata = ks_ndata;
- ksp->ks_data_size = ks_ndata * sizeof(kstat_timer_t);
- break;
- default:
- PANIC("Undefined kstat type %d\n", ksp->ks_type);
- }
+ case KSTAT_TYPE_RAW:
+ ksp->ks_ndata = 1;
+ ksp->ks_data_size = ks_ndata;
+ break;
+ case KSTAT_TYPE_NAMED:
+ ksp->ks_ndata = ks_ndata;
+ ksp->ks_data_size = ks_ndata * sizeof (kstat_named_t);
+ break;
+ case KSTAT_TYPE_INTR:
+ ksp->ks_ndata = ks_ndata;
+ ksp->ks_data_size = ks_ndata * sizeof (kstat_intr_t);
+ break;
+ case KSTAT_TYPE_IO:
+ ksp->ks_ndata = ks_ndata;
+ ksp->ks_data_size = ks_ndata * sizeof (kstat_io_t);
+ break;
+ case KSTAT_TYPE_TIMER:
+ ksp->ks_ndata = ks_ndata;
+ ksp->ks_data_size = ks_ndata * sizeof (kstat_timer_t);
+ break;
+ default:
+ PANIC("Undefined kstat type %d\n", ksp->ks_type);
+ }
if (ksp->ks_flags & KSTAT_FLAG_VIRTUAL) {
- ksp->ks_data = NULL;
- } else {
- ksp->ks_data = kmem_zalloc(ksp->ks_data_size, KM_SLEEP);
- if (ksp->ks_data == NULL) {
- kmem_free(ksp, sizeof(*ksp));
- ksp = NULL;
- }
- }
-
- return ksp;
+ ksp->ks_data = NULL;
+ } else {
+ ksp->ks_data = kmem_zalloc(ksp->ks_data_size, KM_SLEEP);
+ if (ksp->ks_data == NULL) {
+ kmem_free(ksp, sizeof (*ksp));
+ ksp = NULL;
+ }
+ }
+
+ return (ksp);
}
EXPORT_SYMBOL(__kstat_create);
{
kstat_module_t *module;
kstat_t *tmp;
- char parent[KSTAT_STRLEN+1];
+ char *parent;
char *cp;
- (void) strlcpy(parent, ksp->ks_module, sizeof(parent));
+ parent = kmem_asprintf("%s", ksp->ks_module);
- if ((cp = strrchr(parent, '/')) == NULL)
+ if ((cp = strrchr(parent, '/')) == NULL) {
+ strfree(parent);
return (0);
+ }
cp[0] = '\0';
if ((module = kstat_find_module(parent)) != NULL) {
- list_for_each_entry(tmp, &module->ksm_kstat_list, ks_list)
- if (strncmp(tmp->ks_name, cp+1, KSTAT_STRLEN) == 0)
+ list_for_each_entry(tmp, &module->ksm_kstat_list, ks_list) {
+ if (strncmp(tmp->ks_name, cp+1, KSTAT_STRLEN) == 0) {
+ strfree(parent);
return (EEXIST);
+ }
+ }
}
+ strfree(parent);
return (0);
}
* Only one entry by this name per-module, on failure the module
* shouldn't be deleted because we know it has at least one entry.
*/
- list_for_each_entry(tmp, &module->ksm_kstat_list, ks_list)
+ list_for_each_entry(tmp, &module->ksm_kstat_list, ks_list) {
if (strncmp(tmp->ks_name, ksp->ks_name, KSTAT_STRLEN) == 0)
goto out;
+ }
list_add_tail(&ksp->ks_list, &module->ksm_kstat_list);
ksp->ks_lock = NULL;
mutex_destroy(&ksp->ks_private_lock);
- kmem_free(ksp, sizeof(*ksp));
-
- return;
+ kmem_free(ksp, sizeof (*ksp));
}
EXPORT_SYMBOL(__kstat_delete);
{
mutex_init(&kstat_module_lock, NULL, MUTEX_DEFAULT, NULL);
INIT_LIST_HEAD(&kstat_module_list);
- kstat_id = 0;
+ kstat_id = 0;
return (0);
}
ASSERT(list_empty(&kstat_module_list));
mutex_destroy(&kstat_module_lock);
}
-
*
* You should have received a copy of the GNU General Public License along
* with the SPL. If not, see <http://www.gnu.org/licenses/>.
- *****************************************************************************
+ *
* Solaris Porting Layer (SPL) Mutex Implementation.
\*****************************************************************************/
#include <sys/mutex.h>
-#ifdef DEBUG_SUBSYSTEM
-#undef DEBUG_SUBSYSTEM
-#endif
-
-#define DEBUG_SUBSYSTEM S_MUTEX
-
int spl_mutex_init(void) { return 0; }
void spl_mutex_fini(void) { }
*
* You should have received a copy of the GNU General Public License along
* with the SPL. If not, see <http://www.gnu.org/licenses/>.
- *****************************************************************************
+ *
* Solaris Porting Layer (SPL) Proc Implementation.
\*****************************************************************************/
#include <linux/uaccess.h>
#include <linux/version.h>
-#if defined(CONSTIFY_PLUGIN) && LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0)
+#if defined(CONSTIFY_PLUGIN) && LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
typedef struct ctl_table __no_const spl_ctl_table;
#else
typedef struct ctl_table spl_ctl_table;
struct proc_dir_entry *proc_spl_kstat = NULL;
static int
-proc_copyin_string(char *kbuffer, int kbuffer_size,
- const char *ubuffer, int ubuffer_size)
+proc_copyin_string(char *kbuffer, int kbuffer_size, const char *ubuffer,
+ int ubuffer_size)
{
- int size;
+ int size;
- if (ubuffer_size > kbuffer_size)
- return -EOVERFLOW;
+ if (ubuffer_size > kbuffer_size)
+ return (-EOVERFLOW);
- if (copy_from_user((void *)kbuffer, (void *)ubuffer, ubuffer_size))
- return -EFAULT;
+ if (copy_from_user((void *)kbuffer, (void *)ubuffer, ubuffer_size))
+ return (-EFAULT);
- /* strip trailing whitespace */
- size = strnlen(kbuffer, ubuffer_size);
- while (size-- >= 0)
- if (!isspace(kbuffer[size]))
- break;
+ /* strip trailing whitespace */
+ size = strnlen(kbuffer, ubuffer_size);
+ while (size-- >= 0)
+ if (!isspace(kbuffer[size]))
+ break;
- /* empty string */
- if (size < 0)
- return -EINVAL;
+ /* empty string */
+ if (size < 0)
+ return (-EINVAL);
- /* no space to terminate */
- if (size == kbuffer_size)
- return -EOVERFLOW;
+ /* no space to terminate */
+ if (size == kbuffer_size)
+ return (-EOVERFLOW);
- kbuffer[size + 1] = 0;
- return 0;
+ kbuffer[size + 1] = 0;
+ return (0);
}
static int
-proc_copyout_string(char *ubuffer, int ubuffer_size,
- const char *kbuffer, char *append)
+proc_copyout_string(char *ubuffer, int ubuffer_size, const char *kbuffer,
+ char *append)
{
- /* NB if 'append' != NULL, it's a single character to append to the
- * copied out string - usually "\n", for /proc entries and
- * (i.e. a terminating zero byte) for sysctl entries
- */
- int size = MIN(strlen(kbuffer), ubuffer_size);
+ /*
+ * NB if 'append' != NULL, it's a single character to append to the
+ * copied out string - usually "\n", for /proc entries and
+ * (i.e. a terminating zero byte) for sysctl entries
+ */
+ int size = MIN(strlen(kbuffer), ubuffer_size);
- if (copy_to_user(ubuffer, kbuffer, size))
- return -EFAULT;
+ if (copy_to_user(ubuffer, kbuffer, size))
+ return (-EFAULT);
- if (append != NULL && size < ubuffer_size) {
- if (copy_to_user(ubuffer + size, append, 1))
- return -EFAULT;
+ if (append != NULL && size < ubuffer_size) {
+ if (copy_to_user(ubuffer + size, append, 1))
+ return (-EFAULT);
- size++;
- }
+ size++;
+ }
- return size;
+ return (size);
}
#ifdef DEBUG_KMEM
proc_domemused(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos)
{
- int rc = 0;
- unsigned long min = 0, max = ~0, val;
- spl_ctl_table dummy = *table;
-
- dummy.data = &val;
- dummy.proc_handler = &proc_dointvec;
- dummy.extra1 = &min;
- dummy.extra2 = &max;
-
- if (write) {
- *ppos += *lenp;
- } else {
-# ifdef HAVE_ATOMIC64_T
- val = atomic64_read((atomic64_t *)table->data);
-# else
- val = atomic_read((atomic_t *)table->data);
-# endif /* HAVE_ATOMIC64_T */
- rc = proc_doulongvec_minmax(&dummy, write, buffer, lenp, ppos);
- }
-
- return (rc);
+ int rc = 0;
+ unsigned long min = 0, max = ~0, val;
+ spl_ctl_table dummy = *table;
+
+ dummy.data = &val;
+ dummy.proc_handler = &proc_dointvec;
+ dummy.extra1 = &min;
+ dummy.extra2 = &max;
+
+ if (write) {
+ *ppos += *lenp;
+ } else {
+#ifdef HAVE_ATOMIC64_T
+ val = atomic64_read((atomic64_t *)table->data);
+#else
+ val = atomic_read((atomic_t *)table->data);
+#endif /* HAVE_ATOMIC64_T */
+ rc = proc_doulongvec_minmax(&dummy, write, buffer, lenp, ppos);
+ }
+
+ return (rc);
}
#endif /* DEBUG_KMEM */
proc_doslab(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos)
{
- int rc = 0;
- unsigned long min = 0, max = ~0, val = 0, mask;
- spl_ctl_table dummy = *table;
- spl_kmem_cache_t *skc;
+ int rc = 0;
+ unsigned long min = 0, max = ~0, val = 0, mask;
+ spl_ctl_table dummy = *table;
+ spl_kmem_cache_t *skc;
- dummy.data = &val;
- dummy.proc_handler = &proc_dointvec;
- dummy.extra1 = &min;
- dummy.extra2 = &max;
+ dummy.data = &val;
+ dummy.proc_handler = &proc_dointvec;
+ dummy.extra1 = &min;
+ dummy.extra2 = &max;
- if (write) {
- *ppos += *lenp;
- } else {
- down_read(&spl_kmem_cache_sem);
- mask = (unsigned long)table->data;
+ if (write) {
+ *ppos += *lenp;
+ } else {
+ down_read(&spl_kmem_cache_sem);
+ mask = (unsigned long)table->data;
- list_for_each_entry(skc, &spl_kmem_cache_list, skc_list) {
+ list_for_each_entry(skc, &spl_kmem_cache_list, skc_list) {
/* Only use slabs of the correct kmem/vmem type */
if (!(skc->skc_flags & mask))
/* Sum the specified field for selected slabs */
switch (mask & (KMC_TOTAL | KMC_ALLOC | KMC_MAX)) {
case KMC_TOTAL:
- val += skc->skc_slab_size * skc->skc_slab_total;
+ val += skc->skc_slab_size * skc->skc_slab_total;
break;
case KMC_ALLOC:
- val += skc->skc_obj_size * skc->skc_obj_alloc;
+ val += skc->skc_obj_size * skc->skc_obj_alloc;
break;
case KMC_MAX:
- val += skc->skc_obj_size * skc->skc_obj_max;
+ val += skc->skc_obj_size * skc->skc_obj_max;
break;
}
- }
+ }
- up_read(&spl_kmem_cache_sem);
- rc = proc_doulongvec_minmax(&dummy, write, buffer, lenp, ppos);
- }
+ up_read(&spl_kmem_cache_sem);
+ rc = proc_doulongvec_minmax(&dummy, write, buffer, lenp, ppos);
+ }
- return (rc);
+ return (rc);
}
static int
proc_dohostid(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos)
{
- int len, rc = 0;
- char *end, str[32];
-
- if (write) {
- /* We can't use proc_doulongvec_minmax() in the write
- * case here because hostid while a hex value has no
- * leading 0x which confuses the helper function. */
- rc = proc_copyin_string(str, sizeof(str), buffer, *lenp);
- if (rc < 0)
- return (rc);
-
- spl_hostid = simple_strtoul(str, &end, 16);
- if (str == end)
- return (-EINVAL);
-
- } else {
- len = snprintf(str, sizeof(str), "%lx",
+ int len, rc = 0;
+ char *end, str[32];
+
+ if (write) {
+ /*
+ * We can't use proc_doulongvec_minmax() in the write
+ * case here because hostid while a hex value has no
+ * leading 0x which confuses the helper function.
+ */
+ rc = proc_copyin_string(str, sizeof (str), buffer, *lenp);
+ if (rc < 0)
+ return (rc);
+
+ spl_hostid = simple_strtoul(str, &end, 16);
+ if (str == end)
+ return (-EINVAL);
+
+ } else {
+ len = snprintf(str, sizeof (str), "%lx",
(unsigned long) zone_get_hostid(NULL));
- if (*ppos >= len)
- rc = 0;
- else
- rc = proc_copyout_string(buffer,*lenp,str+*ppos,"\n");
-
- if (rc >= 0) {
- *lenp = rc;
- *ppos += rc;
- }
- }
-
- return (rc);
+ if (*ppos >= len)
+ rc = 0;
+ else
+ rc = proc_copyout_string(buffer,
+ *lenp, str + *ppos, "\n");
+
+ if (rc >= 0) {
+ *lenp = rc;
+ *ppos += rc;
+ }
+ }
+
+ return (rc);
}
static void
/* indices into the lheads array below */
#define LHEAD_PEND 0
-#define LHEAD_PRIO 1
-#define LHEAD_DELAY 2
-#define LHEAD_WAIT 3
-#define LHEAD_ACTIVE 4
-#define LHEAD_SIZE 5
+#define LHEAD_PRIO 1
+#define LHEAD_DELAY 2
+#define LHEAD_WAIT 3
+#define LHEAD_ACTIVE 4
+#define LHEAD_SIZE 5
+/* BEGIN CSTYLED */
static unsigned int spl_max_show_tasks = 512;
module_param(spl_max_show_tasks, uint, 0644);
MODULE_PARM_DESC(spl_max_show_tasks, "Max number of tasks shown in taskq proc");
+/* END CSTYLED */
static int
taskq_seq_show_impl(struct seq_file *f, void *p, boolean_t allflag)
spin_unlock_irqrestore(&tq->tq_wait_waitq.lock, wflags);
/* show the base taskq contents */
- snprintf(name, sizeof(name), "%s/%d", tq->tq_name, tq->tq_instance);
+ snprintf(name, sizeof (name), "%s/%d", tq->tq_name, tq->tq_instance);
seq_printf(f, "%-25s ", name);
seq_printf(f, "%5d %5d %5d %5d %5d %5d %12d %5d %10x\n",
tq->tq_nactive, tq->tq_nthreads, tq->tq_nspawn,
j = 0;
list_for_each_entry(tqt, &tq->tq_active_list, tqt_active_list) {
if (j == 0)
- seq_printf(f, "\t%s:", list_names[LHEAD_ACTIVE]);
+ seq_printf(f, "\t%s:",
+ list_names[LHEAD_ACTIVE]);
else if (j == 2) {
seq_printf(f, "\n\t ");
j = 0;
++*pos;
return ((tq->tq_taskqs.next == &tq_list) ?
- NULL : list_entry(tq->tq_taskqs.next, taskq_t, tq_taskqs));
+ NULL : list_entry(tq->tq_taskqs.next, taskq_t, tq_taskqs));
}
static void
slab_seq_show_headers(struct seq_file *f)
{
- seq_printf(f,
- "--------------------- cache ----------"
- "--------------------------------------------- "
- "----- slab ------ "
- "---- object ----- "
- "--- emergency ---\n");
- seq_printf(f,
- "name "
- " flags size alloc slabsize objsize "
- "total alloc max "
- "total alloc max "
- "dlock alloc max\n");
+ seq_printf(f,
+ "--------------------- cache ----------"
+ "--------------------------------------------- "
+ "----- slab ------ "
+ "---- object ----- "
+ "--- emergency ---\n");
+ seq_printf(f,
+ "name "
+ " flags size alloc slabsize objsize "
+ "total alloc max "
+ "total alloc max "
+ "dlock alloc max\n");
}
static int
slab_seq_show(struct seq_file *f, void *p)
{
- spl_kmem_cache_t *skc = p;
+ spl_kmem_cache_t *skc = p;
- ASSERT(skc->skc_magic == SKC_MAGIC);
+ ASSERT(skc->skc_magic == SKC_MAGIC);
/*
* Backed by Linux slab see /proc/slabinfo.
if (skc->skc_flags & KMC_SLAB)
return (0);
- spin_lock(&skc->skc_lock);
- seq_printf(f, "%-36s ", skc->skc_name);
- seq_printf(f, "0x%05lx %9lu %9lu %8u %8u "
- "%5lu %5lu %5lu %5lu %5lu %5lu %5lu %5lu %5lu\n",
- (long unsigned)skc->skc_flags,
- (long unsigned)(skc->skc_slab_size * skc->skc_slab_total),
- (long unsigned)(skc->skc_obj_size * skc->skc_obj_alloc),
- (unsigned)skc->skc_slab_size,
- (unsigned)skc->skc_obj_size,
- (long unsigned)skc->skc_slab_total,
- (long unsigned)skc->skc_slab_alloc,
- (long unsigned)skc->skc_slab_max,
- (long unsigned)skc->skc_obj_total,
- (long unsigned)skc->skc_obj_alloc,
- (long unsigned)skc->skc_obj_max,
- (long unsigned)skc->skc_obj_deadlock,
- (long unsigned)skc->skc_obj_emergency,
- (long unsigned)skc->skc_obj_emergency_max);
-
- spin_unlock(&skc->skc_lock);
-
- return 0;
+ spin_lock(&skc->skc_lock);
+ seq_printf(f, "%-36s ", skc->skc_name);
+ seq_printf(f, "0x%05lx %9lu %9lu %8u %8u "
+ "%5lu %5lu %5lu %5lu %5lu %5lu %5lu %5lu %5lu\n",
+ (long unsigned)skc->skc_flags,
+ (long unsigned)(skc->skc_slab_size * skc->skc_slab_total),
+ (long unsigned)(skc->skc_obj_size * skc->skc_obj_alloc),
+ (unsigned)skc->skc_slab_size,
+ (unsigned)skc->skc_obj_size,
+ (long unsigned)skc->skc_slab_total,
+ (long unsigned)skc->skc_slab_alloc,
+ (long unsigned)skc->skc_slab_max,
+ (long unsigned)skc->skc_obj_total,
+ (long unsigned)skc->skc_obj_alloc,
+ (long unsigned)skc->skc_obj_max,
+ (long unsigned)skc->skc_obj_deadlock,
+ (long unsigned)skc->skc_obj_emergency,
+ (long unsigned)skc->skc_obj_emergency_max);
+
+ spin_unlock(&skc->skc_lock);
+
+ return (0);
}
static void *
slab_seq_start(struct seq_file *f, loff_t *pos)
{
- struct list_head *p;
- loff_t n = *pos;
+ struct list_head *p;
+ loff_t n = *pos;
down_read(&spl_kmem_cache_sem);
- if (!n)
- slab_seq_show_headers(f);
+ if (!n)
+ slab_seq_show_headers(f);
- p = spl_kmem_cache_list.next;
- while (n--) {
- p = p->next;
- if (p == &spl_kmem_cache_list)
- return (NULL);
- }
+ p = spl_kmem_cache_list.next;
+ while (n--) {
+ p = p->next;
+ if (p == &spl_kmem_cache_list)
+ return (NULL);
+ }
- return (list_entry(p, spl_kmem_cache_t, skc_list));
+ return (list_entry(p, spl_kmem_cache_t, skc_list));
}
static void *
{
spl_kmem_cache_t *skc = p;
- ++*pos;
- return ((skc->skc_list.next == &spl_kmem_cache_list) ?
- NULL : list_entry(skc->skc_list.next,spl_kmem_cache_t,skc_list));
+ ++*pos;
+ return ((skc->skc_list.next == &spl_kmem_cache_list) ?
+ NULL : list_entry(skc->skc_list.next, spl_kmem_cache_t, skc_list));
}
static void
}
static struct seq_operations slab_seq_ops = {
- .show = slab_seq_show,
- .start = slab_seq_start,
- .next = slab_seq_next,
- .stop = slab_seq_stop,
+ .show = slab_seq_show,
+ .start = slab_seq_start,
+ .next = slab_seq_next,
+ .stop = slab_seq_stop,
};
static int
proc_slab_open(struct inode *inode, struct file *filp)
{
- return seq_open(filp, &slab_seq_ops);
+ return (seq_open(filp, &slab_seq_ops));
}
static struct file_operations proc_slab_operations = {
- .open = proc_slab_open,
- .read = seq_read,
- .llseek = seq_lseek,
- .release = seq_release,
+ .open = proc_slab_open,
+ .read = seq_read,
+ .llseek = seq_lseek,
+ .release = seq_release,
};
static void
}
static struct seq_operations taskq_all_seq_ops = {
- .show = taskq_all_seq_show,
- .start = taskq_seq_start,
- .next = taskq_seq_next,
- .stop = taskq_seq_stop,
+ .show = taskq_all_seq_show,
+ .start = taskq_seq_start,
+ .next = taskq_seq_next,
+ .stop = taskq_seq_stop,
};
static struct seq_operations taskq_seq_ops = {
- .show = taskq_seq_show,
- .start = taskq_seq_start,
- .next = taskq_seq_next,
- .stop = taskq_seq_stop,
+ .show = taskq_seq_show,
+ .start = taskq_seq_start,
+ .next = taskq_seq_next,
+ .stop = taskq_seq_stop,
};
static int
proc_taskq_all_open(struct inode *inode, struct file *filp)
{
- return seq_open(filp, &taskq_all_seq_ops);
+ return (seq_open(filp, &taskq_all_seq_ops));
}
static int
proc_taskq_open(struct inode *inode, struct file *filp)
{
- return seq_open(filp, &taskq_seq_ops);
+ return (seq_open(filp, &taskq_seq_ops));
}
static struct file_operations proc_taskq_all_operations = {
- .open = proc_taskq_all_open,
- .read = seq_read,
- .llseek = seq_lseek,
- .release = seq_release,
+ .open = proc_taskq_all_open,
+ .read = seq_read,
+ .llseek = seq_lseek,
+ .release = seq_release,
};
static struct file_operations proc_taskq_operations = {
- .open = proc_taskq_open,
- .read = seq_read,
- .llseek = seq_lseek,
- .release = seq_release,
+ .open = proc_taskq_open,
+ .read = seq_read,
+ .llseek = seq_lseek,
+ .release = seq_release,
};
static struct ctl_table spl_kmem_table[] = {
#ifdef DEBUG_KMEM
- {
- .procname = "kmem_used",
- .data = &kmem_alloc_used,
-# ifdef HAVE_ATOMIC64_T
- .maxlen = sizeof(atomic64_t),
-# else
- .maxlen = sizeof(atomic_t),
-# endif /* HAVE_ATOMIC64_T */
- .mode = 0444,
- .proc_handler = &proc_domemused,
- },
- {
- .procname = "kmem_max",
- .data = &kmem_alloc_max,
- .maxlen = sizeof(unsigned long),
- .extra1 = &table_min,
- .extra2 = &table_max,
- .mode = 0444,
- .proc_handler = &proc_doulongvec_minmax,
- },
+ {
+ .procname = "kmem_used",
+ .data = &kmem_alloc_used,
+#ifdef HAVE_ATOMIC64_T
+ .maxlen = sizeof (atomic64_t),
+#else
+ .maxlen = sizeof (atomic_t),
+#endif /* HAVE_ATOMIC64_T */
+ .mode = 0444,
+ .proc_handler = &proc_domemused,
+ },
+ {
+ .procname = "kmem_max",
+ .data = &kmem_alloc_max,
+ .maxlen = sizeof (unsigned long),
+ .extra1 = &table_min,
+ .extra2 = &table_max,
+ .mode = 0444,
+ .proc_handler = &proc_doulongvec_minmax,
+ },
#endif /* DEBUG_KMEM */
- {
- .procname = "slab_kmem_total",
- .data = (void *)(KMC_KMEM | KMC_TOTAL),
- .maxlen = sizeof(unsigned long),
- .extra1 = &table_min,
- .extra2 = &table_max,
- .mode = 0444,
- .proc_handler = &proc_doslab,
- },
- {
- .procname = "slab_kmem_alloc",
- .data = (void *)(KMC_KMEM | KMC_ALLOC),
- .maxlen = sizeof(unsigned long),
- .extra1 = &table_min,
- .extra2 = &table_max,
- .mode = 0444,
- .proc_handler = &proc_doslab,
- },
- {
- .procname = "slab_kmem_max",
- .data = (void *)(KMC_KMEM | KMC_MAX),
- .maxlen = sizeof(unsigned long),
- .extra1 = &table_min,
- .extra2 = &table_max,
- .mode = 0444,
- .proc_handler = &proc_doslab,
- },
- {
- .procname = "slab_vmem_total",
- .data = (void *)(KMC_VMEM | KMC_TOTAL),
- .maxlen = sizeof(unsigned long),
- .extra1 = &table_min,
- .extra2 = &table_max,
- .mode = 0444,
- .proc_handler = &proc_doslab,
- },
- {
- .procname = "slab_vmem_alloc",
- .data = (void *)(KMC_VMEM | KMC_ALLOC),
- .maxlen = sizeof(unsigned long),
- .extra1 = &table_min,
- .extra2 = &table_max,
- .mode = 0444,
- .proc_handler = &proc_doslab,
- },
- {
- .procname = "slab_vmem_max",
- .data = (void *)(KMC_VMEM | KMC_MAX),
- .maxlen = sizeof(unsigned long),
- .extra1 = &table_min,
- .extra2 = &table_max,
- .mode = 0444,
- .proc_handler = &proc_doslab,
- },
+ {
+ .procname = "slab_kmem_total",
+ .data = (void *)(KMC_KMEM | KMC_TOTAL),
+ .maxlen = sizeof (unsigned long),
+ .extra1 = &table_min,
+ .extra2 = &table_max,
+ .mode = 0444,
+ .proc_handler = &proc_doslab,
+ },
+ {
+ .procname = "slab_kmem_alloc",
+ .data = (void *)(KMC_KMEM | KMC_ALLOC),
+ .maxlen = sizeof (unsigned long),
+ .extra1 = &table_min,
+ .extra2 = &table_max,
+ .mode = 0444,
+ .proc_handler = &proc_doslab,
+ },
+ {
+ .procname = "slab_kmem_max",
+ .data = (void *)(KMC_KMEM | KMC_MAX),
+ .maxlen = sizeof (unsigned long),
+ .extra1 = &table_min,
+ .extra2 = &table_max,
+ .mode = 0444,
+ .proc_handler = &proc_doslab,
+ },
+ {
+ .procname = "slab_vmem_total",
+ .data = (void *)(KMC_VMEM | KMC_TOTAL),
+ .maxlen = sizeof (unsigned long),
+ .extra1 = &table_min,
+ .extra2 = &table_max,
+ .mode = 0444,
+ .proc_handler = &proc_doslab,
+ },
+ {
+ .procname = "slab_vmem_alloc",
+ .data = (void *)(KMC_VMEM | KMC_ALLOC),
+ .maxlen = sizeof (unsigned long),
+ .extra1 = &table_min,
+ .extra2 = &table_max,
+ .mode = 0444,
+ .proc_handler = &proc_doslab,
+ },
+ {
+ .procname = "slab_vmem_max",
+ .data = (void *)(KMC_VMEM | KMC_MAX),
+ .maxlen = sizeof (unsigned long),
+ .extra1 = &table_min,
+ .extra2 = &table_max,
+ .mode = 0444,
+ .proc_handler = &proc_doslab,
+ },
{},
};
};
static struct ctl_table spl_table[] = {
- /* NB No .strategy entries have been provided since
- * sysctl(8) prefers to go via /proc for portability.
- */
- {
- .procname = "version",
- .data = spl_version,
- .maxlen = sizeof(spl_version),
- .mode = 0444,
- .proc_handler = &proc_dostring,
- },
- {
- .procname = "hostid",
- .data = &spl_hostid,
- .maxlen = sizeof(unsigned long),
- .mode = 0644,
- .proc_handler = &proc_dohostid,
- },
+ /*
+ * NB No .strategy entries have been provided since
+ * sysctl(8) prefers to go via /proc for portability.
+ */
+ {
+ .procname = "version",
+ .data = spl_version,
+ .maxlen = sizeof (spl_version),
+ .mode = 0444,
+ .proc_handler = &proc_dostring,
+ },
+ {
+ .procname = "hostid",
+ .data = &spl_hostid,
+ .maxlen = sizeof (unsigned long),
+ .mode = 0644,
+ .proc_handler = &proc_dohostid,
+ },
{
- .procname = "kmem",
- .mode = 0555,
- .child = spl_kmem_table,
+ .procname = "kmem",
+ .mode = 0555,
+ .child = spl_kmem_table,
},
{
- .procname = "kstat",
- .mode = 0555,
- .child = spl_kstat_table,
+ .procname = "kstat",
+ .mode = 0555,
+ .child = spl_kstat_table,
},
- {},
+ {},
};
static struct ctl_table spl_dir[] = {
- {
- .procname = "spl",
- .mode = 0555,
- .child = spl_table,
- },
- {}
+ {
+ .procname = "spl",
+ .mode = 0555,
+ .child = spl_table,
+ },
+ {}
};
static struct ctl_table spl_root[] = {
{
int rc = 0;
- spl_header = register_sysctl_table(spl_root);
+ spl_header = register_sysctl_table(spl_root);
if (spl_header == NULL)
return (-EUNATCH);
goto out;
}
- proc_spl_taskq_all = proc_create_data("taskq-all", 0444,
- proc_spl, &proc_taskq_all_operations, NULL);
+ proc_spl_taskq_all = proc_create_data("taskq-all", 0444, proc_spl,
+ &proc_taskq_all_operations, NULL);
if (proc_spl_taskq_all == NULL) {
rc = -EUNATCH;
goto out;
}
- proc_spl_taskq = proc_create_data("taskq", 0444,
- proc_spl, &proc_taskq_operations, NULL);
+ proc_spl_taskq = proc_create_data("taskq", 0444, proc_spl,
+ &proc_taskq_operations, NULL);
if (proc_spl_taskq == NULL) {
rc = -EUNATCH;
goto out;
}
- proc_spl_kmem = proc_mkdir("kmem", proc_spl);
- if (proc_spl_kmem == NULL) {
- rc = -EUNATCH;
+ proc_spl_kmem = proc_mkdir("kmem", proc_spl);
+ if (proc_spl_kmem == NULL) {
+ rc = -EUNATCH;
goto out;
}
- proc_spl_kmem_slab = proc_create_data("slab", 0444,
- proc_spl_kmem, &proc_slab_operations, NULL);
- if (proc_spl_kmem_slab == NULL) {
+ proc_spl_kmem_slab = proc_create_data("slab", 0444, proc_spl_kmem,
+ &proc_slab_operations, NULL);
+ if (proc_spl_kmem_slab == NULL) {
rc = -EUNATCH;
goto out;
}
- proc_spl_kstat = proc_mkdir("kstat", proc_spl);
- if (proc_spl_kstat == NULL) {
- rc = -EUNATCH;
+ proc_spl_kstat = proc_mkdir("kstat", proc_spl);
+ if (proc_spl_kstat == NULL) {
+ rc = -EUNATCH;
goto out;
}
out:
if (rc) {
remove_proc_entry("kstat", proc_spl);
- remove_proc_entry("slab", proc_spl_kmem);
+ remove_proc_entry("slab", proc_spl_kmem);
remove_proc_entry("kmem", proc_spl);
remove_proc_entry("taskq-all", proc_spl);
remove_proc_entry("taskq", proc_spl);
remove_proc_entry("spl", NULL);
- unregister_sysctl_table(spl_header);
+ unregister_sysctl_table(spl_header);
}
- return (rc);
+ return (rc);
}
void
spl_proc_fini(void)
{
remove_proc_entry("kstat", proc_spl);
- remove_proc_entry("slab", proc_spl_kmem);
+ remove_proc_entry("slab", proc_spl_kmem);
remove_proc_entry("kmem", proc_spl);
remove_proc_entry("taskq-all", proc_spl);
remove_proc_entry("taskq", proc_spl);
remove_proc_entry("spl", NULL);
- ASSERT(spl_header != NULL);
- unregister_sysctl_table(spl_header);
+ ASSERT(spl_header != NULL);
+ unregister_sysctl_table(spl_header);
}
*
* You should have received a copy of the GNU General Public License along
* with the SPL. If not, see <http://www.gnu.org/licenses/>.
- *****************************************************************************
+ *
* Solaris Porting Layer (SPL) Reader/Writer Lock Implementation.
\*****************************************************************************/
#include <sys/rwlock.h>
-#ifdef DEBUG_SUBSYSTEM
-#undef DEBUG_SUBSYSTEM
-#endif
-
-#define DEBUG_SUBSYSTEM S_RWLOCK
-
#if defined(CONFIG_PREEMPT_RT_FULL)
#include <linux/rtmutex.h>
static int
__rwsem_tryupgrade(struct rw_semaphore *rwsem)
{
- typeof (rwsem->count) val;
+ typeof(rwsem->count) val;
val = cmpxchg(&rwsem->count, SPL_RWSEM_SINGLE_READER_VALUE,
SPL_RWSEM_SINGLE_WRITER_VALUE);
return (val == SPL_RWSEM_SINGLE_READER_VALUE);
list_for_each_prev(tql, &tq_list) {
tq = list_entry(tql, taskq_t, tq_taskqs);
if (strcmp(name, tq->tq_name) == 0)
- return tq->tq_instance;
+ return (tq->tq_instance);
}
return (-1);
}
int count = 0;
ASSERT(tq);
- ASSERT(spin_is_locked(&tq->tq_lock));
retry:
/* Acquire taskq_ent_t's from free list if available */
if (!list_empty(&tq->tq_free_list) && !(flags & TQ_NEW)) {
{
ASSERT(tq);
ASSERT(t);
- ASSERT(spin_is_locked(&tq->tq_lock));
ASSERT(list_empty(&t->tqent_list));
ASSERT(!timer_pending(&t->tqent_timer));
{
ASSERT(tq);
ASSERT(t);
- ASSERT(spin_is_locked(&tq->tq_lock));
/* Wake tasks blocked in taskq_wait_id() */
wake_up_all(&t->tqent_waitq);
taskq_thread_t *tqt;
ASSERT(tq);
- ASSERT(spin_is_locked(&tq->tq_lock));
if (!list_empty(&tq->tq_pend_list)) {
t = list_entry(tq->tq_pend_list.next, taskq_ent_t, tqent_list);
ASSERT(tq);
ASSERT(tqt);
- ASSERT(spin_is_locked(&tq->tq_lock));
list_for_each_prev(l, &tq->tq_active_list) {
w = list_entry(l, taskq_thread_t, tqt_active_list);
struct list_head *l;
taskq_ent_t *t;
- ASSERT(spin_is_locked(&tq->tq_lock));
-
list_for_each(l, lh) {
t = list_entry(l, taskq_ent_t, tqent_list);
struct list_head *l;
taskq_ent_t *t;
- ASSERT(spin_is_locked(&tq->tq_lock));
-
t = taskq_find_list(tq, &tq->tq_delay_list, id);
if (t)
return (t);
ASSERT(tq->tq_nactive <= tq->tq_nthreads);
if ((flags & TQ_NOQUEUE) && (tq->tq_nactive == tq->tq_nthreads)) {
/* Dynamic taskq may be able to spawn another thread */
- if (!(tq->tq_flags & TASKQ_DYNAMIC) || taskq_thread_spawn(tq) == 0)
+ if (!(tq->tq_flags & TASKQ_DYNAMIC) ||
+ taskq_thread_spawn(tq) == 0)
goto out;
}
if ((flags & TQ_NOQUEUE) && (tq->tq_nactive == tq->tq_nthreads)) {
/* Dynamic taskq may be able to spawn another thread */
- if (!(tq->tq_flags & TASKQ_DYNAMIC) || taskq_thread_spawn(tq) == 0)
+ if (!(tq->tq_flags & TASKQ_DYNAMIC) ||
+ taskq_thread_spawn(tq) == 0)
goto out2;
flags |= TQ_FRONT;
}
{
struct list_head *list;
- ASSERT(spin_is_locked(&tq->tq_lock));
-
if (!list_empty(&tq->tq_prio_list))
list = &tq->tq_prio_list;
else if (!list_empty(&tq->tq_pend_list))
if (taskq_thread_create(tq) == NULL) {
/* restore spawning count if failed */
- spin_lock_irqsave_nested(&tq->tq_lock, flags, tq->tq_lock_class);
+ spin_lock_irqsave_nested(&tq->tq_lock, flags,
+ tq->tq_lock_class);
tq->tq_nspawn--;
spin_unlock_irqrestore(&tq->tq_lock, flags);
}
static int
taskq_thread_should_stop(taskq_t *tq, taskq_thread_t *tqt)
{
- ASSERT(spin_is_locked(&tq->tq_lock));
-
if (!(tq->tq_flags & TASKQ_DYNAMIC))
return (0);
while (tq->tq_nspawn) {
spin_unlock_irqrestore(&tq->tq_lock, flags);
schedule_timeout_interruptible(1);
- spin_lock_irqsave_nested(&tq->tq_lock, flags, tq->tq_lock_class);
+ spin_lock_irqsave_nested(&tq->tq_lock, flags,
+ tq->tq_lock_class);
}
/*
#ifdef module_param_cb
static const struct kernel_param_ops param_ops_taskq_kick = {
- .set = param_set_taskq_kick,
- .get = param_get_uint,
+ .set = param_set_taskq_kick,
+ .get = param_get_uint,
};
module_param_cb(spl_taskq_kick, ¶m_ops_taskq_kick, &spl_taskq_kick, 0644);
#else
module_param_call(spl_taskq_kick, param_set_taskq_kick, param_get_uint,
- &spl_taskq_kick, 0644);
+ &spl_taskq_kick, 0644);
#endif
MODULE_PARM_DESC(spl_taskq_kick,
- "Write nonzero to kick stuck taskqs to spawn more threads");
+ "Write nonzero to kick stuck taskqs to spawn more threads");
int
spl_taskq_init(void)
*
* You should have received a copy of the GNU General Public License along
* with the SPL. If not, see <http://www.gnu.org/licenses/>.
- *****************************************************************************
+ *
* Solaris Porting Layer (SPL) Thread Implementation.
\*****************************************************************************/
*/
typedef struct thread_priv_s {
unsigned long tp_magic; /* Magic */
- int tp_name_size; /* Name size */
- char *tp_name; /* Name (without _thread suffix) */
+ int tp_name_size; /* Name size */
+ char *tp_name; /* Name (without _thread suffix) */
void (*tp_func)(void *); /* Registered function */
void *tp_args; /* Args to be passed to function */
size_t tp_len; /* Len to be passed to function */
set_current_state(tp->tp_state);
set_user_nice((kthread_t *)current, PRIO_TO_NICE(tp->tp_pri));
kmem_free(tp->tp_name, tp->tp_name_size);
- kmem_free(tp, sizeof(thread_priv_t));
+ kmem_free(tp, sizeof (thread_priv_t));
if (func)
func(args);
- return 0;
+ return (0);
}
void
}
EXPORT_SYMBOL(__thread_exit);
-/* thread_create() may block forever if it cannot create a thread or
+/*
+ * thread_create() may block forever if it cannot create a thread or
* allocate memory. This is preferable to returning a NULL which Solaris
- * style callers likely never check for... since it can't fail. */
+ * style callers likely never check for... since it can't fail.
+ */
kthread_t *
__thread_create(caddr_t stk, size_t stksize, thread_func_t func,
- const char *name, void *args, size_t len, proc_t *pp,
- int state, pri_t pri)
+ const char *name, void *args, size_t len, proc_t *pp, int state, pri_t pri)
{
thread_priv_t *tp;
struct task_struct *tsk;
/* Variable stack size unsupported */
ASSERT(stk == NULL);
- tp = kmem_alloc(sizeof(thread_priv_t), KM_PUSHPAGE);
+ tp = kmem_alloc(sizeof (thread_priv_t), KM_PUSHPAGE);
if (tp == NULL)
return (NULL);
tp->tp_name_size = strlen(name) + 1;
tp->tp_name = kmem_alloc(tp->tp_name_size, KM_PUSHPAGE);
- if (tp->tp_name == NULL) {
- kmem_free(tp, sizeof(thread_priv_t));
+ if (tp->tp_name == NULL) {
+ kmem_free(tp, sizeof (thread_priv_t));
return (NULL);
}
strncpy(tp->tp_name, name, tp->tp_name_size);
- /* Strip trailing "_thread" from passed name which will be the func
+ /*
+ * Strip trailing "_thread" from passed name which will be the func
* name since the exposed API has no parameter for passing a name.
*/
p = strstr(tp->tp_name, "_thread");
tp->tp_pri = pri;
tsk = spl_kthread_create(thread_generic_wrapper, (void *)tp,
- "%s", tp->tp_name);
+ "%s", tp->tp_name);
if (IS_ERR(tsk))
return (NULL);
char name[TASK_COMM_LEN];
va_start(args, namefmt);
- vsnprintf(name, sizeof(name), namefmt, args);
+ vsnprintf(name, sizeof (name), namefmt, args);
va_end(args);
do {
tsk = kthread_create(func, data, "%s", name);
static void
tsd_hash_del(tsd_hash_table_t *table, tsd_hash_entry_t *entry)
{
- ASSERT(spin_is_locked(&table->ht_lock));
hlist_del(&entry->he_list);
list_del_init(&entry->he_key_list);
list_del_init(&entry->he_pid_list);
*
* You should have received a copy of the GNU General Public License along
* with the SPL. If not, see <http://www.gnu.org/licenses/>.
- *****************************************************************************
+ *
* Solaris Porting Layer (SPL) Vnode Implementation.
\*****************************************************************************/
vn_mode_to_vtype(mode_t mode)
{
if (S_ISREG(mode))
- return VREG;
+ return (VREG);
if (S_ISDIR(mode))
- return VDIR;
+ return (VDIR);
if (S_ISCHR(mode))
- return VCHR;
+ return (VCHR);
if (S_ISBLK(mode))
- return VBLK;
+ return (VBLK);
if (S_ISFIFO(mode))
- return VFIFO;
+ return (VFIFO);
if (S_ISLNK(mode))
- return VLNK;
+ return (VLNK);
if (S_ISSOCK(mode))
- return VSOCK;
+ return (VSOCK);
- return VNON;
+ return (VNON);
} /* vn_mode_to_vtype() */
EXPORT_SYMBOL(vn_mode_to_vtype);
vn_vtype_to_mode(vtype_t vtype)
{
if (vtype == VREG)
- return S_IFREG;
+ return (S_IFREG);
if (vtype == VDIR)
- return S_IFDIR;
+ return (S_IFDIR);
if (vtype == VCHR)
- return S_IFCHR;
+ return (S_IFCHR);
if (vtype == VBLK)
- return S_IFBLK;
+ return (S_IFBLK);
if (vtype == VFIFO)
- return S_IFIFO;
+ return (S_IFIFO);
if (vtype == VLNK)
- return S_IFLNK;
+ return (S_IFLNK);
if (vtype == VSOCK)
- return S_IFSOCK;
+ return (S_IFSOCK);
- return VNON;
+ return (VNON);
} /* vn_vtype_to_mode() */
EXPORT_SYMBOL(vn_vtype_to_mode);
EXPORT_SYMBOL(vn_free);
int
-vn_open(const char *path, uio_seg_t seg, int flags, int mode,
- vnode_t **vpp, int x1, void *x2)
+vn_open(const char *path, uio_seg_t seg, int flags, int mode, vnode_t **vpp,
+ int x1, void *x2)
{
struct file *fp;
struct kstat stat;
if (!(flags & FCREAT) && (flags & FWRITE))
flags |= FEXCL;
- /* Note for filp_open() the two low bits must be remapped to mean:
+ /*
+ * Note for filp_open() the two low bits must be remapped to mean:
* 01 - read-only -> 00 read-only
* 10 - write-only -> 01 write-only
* 11 - read-write -> 10 read-write
fp = filp_open(path, flags, mode);
if (flags & FCREAT)
- (void)xchg(¤t->fs->umask, saved_umask);
+ (void) xchg(¤t->fs->umask, saved_umask);
if (IS_ERR(fp))
return (-PTR_ERR(fp));
int
vn_openat(const char *path, uio_seg_t seg, int flags, int mode,
- vnode_t **vpp, int x1, void *x2, vnode_t *vp, int fd)
+ vnode_t **vpp, int x1, void *x2, vnode_t *vp, int fd)
{
char *realpath;
int len, rc;
if (!realpath)
return (ENOMEM);
- (void)snprintf(realpath, len, "/%s", path);
+ (void) snprintf(realpath, len, "/%s", path);
rc = vn_open(realpath, seg, flags, mode, vpp, x1, x2);
kfree(realpath);
int
vn_rdwr(uio_rw_t uio, vnode_t *vp, void *addr, ssize_t len, offset_t off,
- uio_seg_t seg, int ioflag, rlim64_t x2, void *x3, ssize_t *residp)
+ uio_seg_t seg, int ioflag, rlim64_t x2, void *x3, ssize_t *residp)
{
struct file *fp = vp->v_file;
loff_t offset = off;
} /* vn_close() */
EXPORT_SYMBOL(vn_close);
-/* vn_seek() does not actually seek it only performs bounds checking on the
+/*
+ * vn_seek() does not actually seek it only performs bounds checking on the
* proposed seek. We perform minimal checking and allow vn_rdwr() to catch
- * anything more serious. */
+ * anything more serious.
+ */
int
vn_seek(vnode_t *vp, offset_t ooff, offset_t *noffp, void *ct)
{
}
EXPORT_SYMBOL(vn_seek);
-/*
- * spl_basename() takes a NULL-terminated string s as input containing a path.
- * It returns a char pointer to a string and a length that describe the
- * basename of the path. If the basename is not "." or "/", it will be an index
- * into the string. While the string should be NULL terminated, the section
- * referring to the basename is not. spl_basename is dual-licensed GPLv2+ and
- * CC0. Anyone wishing to reuse it in another codebase may pick either license.
- */
-static void
-spl_basename(const char *s, const char **str, int *len)
-{
- size_t i, end;
-
- ASSERT(str);
- ASSERT(len);
-
- if (!s || !*s) {
- *str = ".";
- *len = 1;
- return;
- }
-
- i = strlen(s) - 1;
-
- while (i && s[i--] == '/');
-
- if (i == 0) {
- *str = "/";
- *len = 1;
- return;
- }
-
- end = i;
-
- for (end = i; i; i--) {
- if (s[i] == '/') {
- *str = &s[i+1];
- *len = end - i + 1;
- return;
- }
- }
-
- *str = s;
- *len = end + 1;
-}
-
-static struct dentry *
-spl_kern_path_locked(const char *name, struct path *path)
-{
- struct path parent;
- struct dentry *dentry;
- const char *basename;
- int len;
- int rc;
-
- ASSERT(name);
- ASSERT(path);
-
- spl_basename(name, &basename, &len);
-
- /* We do not accept "." or ".." */
- if (len <= 2 && basename[0] == '.')
- if (len == 1 || basename[1] == '.')
- return (ERR_PTR(-EACCES));
-
- rc = kern_path(name, LOOKUP_PARENT, &parent);
- if (rc)
- return (ERR_PTR(rc));
-
- /* use I_MUTEX_PARENT because vfs_unlink needs it */
- spl_inode_lock_nested(parent.dentry->d_inode, I_MUTEX_PARENT);
-
- dentry = lookup_one_len(basename, parent.dentry, len);
- if (IS_ERR(dentry)) {
- spl_inode_unlock(parent.dentry->d_inode);
- path_put(&parent);
- } else {
- *path = parent;
- }
-
- return (dentry);
-}
-
-/* Based on do_unlinkat() from linux/fs/namei.c */
-int
-vn_remove(const char *path, uio_seg_t seg, int flags)
-{
- struct dentry *dentry;
- struct path parent;
- struct inode *inode = NULL;
- int rc = 0;
-
- ASSERT(seg == UIO_SYSSPACE);
- ASSERT(flags == RMFILE);
-
- dentry = spl_kern_path_locked(path, &parent);
- rc = PTR_ERR(dentry);
- if (!IS_ERR(dentry)) {
- if (parent.dentry->d_name.name[parent.dentry->d_name.len]) {
- rc = 0;
- goto slashes;
- }
-
- inode = dentry->d_inode;
- if (inode) {
- atomic_inc(&inode->i_count);
- } else {
- rc = 0;
- goto slashes;
- }
-
-#ifdef HAVE_2ARGS_VFS_UNLINK
- rc = vfs_unlink(parent.dentry->d_inode, dentry);
-#else
- rc = vfs_unlink(parent.dentry->d_inode, dentry, NULL);
-#endif /* HAVE_2ARGS_VFS_UNLINK */
-exit1:
- dput(dentry);
- } else {
- return (-rc);
- }
-
- spl_inode_unlock(parent.dentry->d_inode);
- if (inode)
- iput(inode); /* truncate the inode here */
-
- path_put(&parent);
- return (-rc);
-
-slashes:
- rc = !dentry->d_inode ? -ENOENT :
- S_ISDIR(dentry->d_inode->i_mode) ? -EISDIR : -ENOTDIR;
- goto exit1;
-} /* vn_remove() */
-EXPORT_SYMBOL(vn_remove);
-
-/* Based on do_rename() from linux/fs/namei.c */
-int
-vn_rename(const char *oldname, const char *newname, int x1)
-{
- struct dentry *old_dir, *new_dir;
- struct dentry *old_dentry, *new_dentry;
- struct dentry *trap;
- struct path old_parent, new_parent;
- int rc = 0;
-
- old_dentry = spl_kern_path_locked(oldname, &old_parent);
- if (IS_ERR(old_dentry)) {
- rc = PTR_ERR(old_dentry);
- goto exit;
- }
-
- spl_inode_unlock(old_parent.dentry->d_inode);
-
- new_dentry = spl_kern_path_locked(newname, &new_parent);
- if (IS_ERR(new_dentry)) {
- rc = PTR_ERR(new_dentry);
- goto exit2;
- }
-
- spl_inode_unlock(new_parent.dentry->d_inode);
-
- rc = -EXDEV;
- if (old_parent.mnt != new_parent.mnt)
- goto exit3;
-
- old_dir = old_parent.dentry;
- new_dir = new_parent.dentry;
- trap = lock_rename(new_dir, old_dir);
-
- /* source should not be ancestor of target */
- rc = -EINVAL;
- if (old_dentry == trap)
- goto exit4;
-
- /* target should not be an ancestor of source */
- rc = -ENOTEMPTY;
- if (new_dentry == trap)
- goto exit4;
-
- /* source must exist */
- rc = -ENOENT;
- if (!old_dentry->d_inode)
- goto exit4;
-
- /* unless the source is a directory trailing slashes give -ENOTDIR */
- if (!S_ISDIR(old_dentry->d_inode->i_mode)) {
- rc = -ENOTDIR;
- if (old_dentry->d_name.name[old_dentry->d_name.len])
- goto exit4;
- if (new_dentry->d_name.name[new_dentry->d_name.len])
- goto exit4;
- }
-
-#if defined(HAVE_4ARGS_VFS_RENAME)
- rc = vfs_rename(old_dir->d_inode, old_dentry,
- new_dir->d_inode, new_dentry);
-#elif defined(HAVE_5ARGS_VFS_RENAME)
- rc = vfs_rename(old_dir->d_inode, old_dentry,
- new_dir->d_inode, new_dentry, NULL);
-#else
- rc = vfs_rename(old_dir->d_inode, old_dentry,
- new_dir->d_inode, new_dentry, NULL, 0);
-#endif
-exit4:
- unlock_rename(new_dir, old_dir);
-exit3:
- dput(new_dentry);
- path_put(&new_parent);
-exit2:
- dput(old_dentry);
- path_put(&old_parent);
-exit:
- return (-rc);
-}
-EXPORT_SYMBOL(vn_rename);
-
int
vn_getattr(vnode_t *vp, vattr_t *vap, int flags, void *x3, void *x4)
{
if (rc)
return (-rc);
- vap->va_type = vn_mode_to_vtype(stat.mode);
- vap->va_mode = stat.mode;
- vap->va_uid = KUID_TO_SUID(stat.uid);
- vap->va_gid = KGID_TO_SGID(stat.gid);
- vap->va_fsid = 0;
- vap->va_nodeid = stat.ino;
- vap->va_nlink = stat.nlink;
- vap->va_size = stat.size;
- vap->va_blksize = stat.blksize;
- vap->va_atime = stat.atime;
- vap->va_mtime = stat.mtime;
- vap->va_ctime = stat.ctime;
- vap->va_rdev = stat.rdev;
- vap->va_nblocks = stat.blocks;
+ vap->va_type = vn_mode_to_vtype(stat.mode);
+ vap->va_mode = stat.mode;
+ vap->va_uid = KUID_TO_SUID(stat.uid);
+ vap->va_gid = KGID_TO_SGID(stat.gid);
+ vap->va_fsid = 0;
+ vap->va_nodeid = stat.ino;
+ vap->va_nlink = stat.nlink;
+ vap->va_size = stat.size;
+ vap->va_blksize = stat.blksize;
+ vap->va_atime = stat.atime;
+ vap->va_mtime = stat.mtime;
+ vap->va_ctime = stat.ctime;
+ vap->va_rdev = stat.rdev;
+ vap->va_nblocks = stat.blocks;
return (0);
}
EXPORT_SYMBOL(vn_getattr);
-int vn_fsync(vnode_t *vp, int flags, void *x3, void *x4)
+int
+vn_fsync(vnode_t *vp, int flags, void *x3, void *x4)
{
int datasync = 0;
int error;
--end;
vp->v_file->f_dentry->d_inode->i_op->truncate_range(
- vp->v_file->f_dentry->d_inode,
- bfp->l_start, end
- );
+ vp->v_file->f_dentry->d_inode, bfp->l_start, end);
+
return (0);
}
#endif
static file_t *
file_find(int fd, struct task_struct *task)
{
- file_t *fp;
-
- ASSERT(spin_is_locked(&vn_file_lock));
+ file_t *fp;
- list_for_each_entry(fp, &vn_file_list, f_list) {
+ list_for_each_entry(fp, &vn_file_list, f_list) {
if (fd == fp->f_fd && fp->f_task == task) {
ASSERT(atomic_read(&fp->f_ref) != 0);
- return fp;
+ return (fp);
}
}
- return NULL;
+ return (NULL);
} /* file_find() */
file_t *
vn_getf(int fd)
{
- struct kstat stat;
+ struct kstat stat;
struct file *lfp;
file_t *fp;
vnode_t *vp;
goto out_fget;
#if defined(HAVE_4ARGS_VFS_GETATTR)
- rc = vfs_getattr(&lfp->f_path, &stat, STATX_TYPE, AT_STATX_SYNC_AS_STAT);
+ rc = vfs_getattr(&lfp->f_path, &stat, STATX_TYPE,
+ AT_STATX_SYNC_AS_STAT);
#elif defined(HAVE_2ARGS_VFS_GETATTR)
rc = vfs_getattr(&lfp->f_path, &stat);
#else
rc = vfs_getattr(lfp->f_path.mnt, lfp->f_dentry, &stat);
#endif
- if (rc)
+ if (rc)
goto out_vnode;
mutex_enter(&vp->v_lock);
mutex_exit(&fp->f_lock);
kmem_cache_free(vn_file_cache, fp);
out:
- return (NULL);
+ return (NULL);
} /* getf() */
EXPORT_SYMBOL(getf);
return;
}
- list_del(&fp->f_list);
+ list_del(&fp->f_list);
releasef_locked(fp);
}
spin_unlock(&vn_file_lock);
-
- return;
} /* releasef() */
EXPORT_SYMBOL(areleasef);
int
vn_set_pwd(const char *filename)
{
- struct path path;
- mm_segment_t saved_fs;
- int rc;
-
- /*
- * user_path_dir() and __user_walk() both expect 'filename' to be
- * a user space address so we must briefly increase the data segment
- * size to ensure strncpy_from_user() does not fail with -EFAULT.
- */
- saved_fs = get_fs();
- set_fs(get_ds());
-
- rc = user_path_dir(filename, &path);
- if (rc)
+ struct path path;
+ mm_segment_t saved_fs;
+ int rc;
+
+ /*
+ * user_path_dir() and __user_walk() both expect 'filename' to be
+ * a user space address so we must briefly increase the data segment
+ * size to ensure strncpy_from_user() does not fail with -EFAULT.
+ */
+ saved_fs = get_fs();
+ set_fs(get_ds());
+
+ rc = user_path_dir(filename, &path);
+ if (rc)
goto out;
- rc = inode_permission(path.dentry->d_inode, MAY_EXEC | MAY_ACCESS);
- if (rc)
+ rc = inode_permission(path.dentry->d_inode, MAY_EXEC | MAY_ACCESS);
+ if (rc)
goto dput_and_out;
- vn_set_fs_pwd(current->fs, &path);
+ vn_set_fs_pwd(current->fs, &path);
dput_and_out:
- path_put(&path);
+ path_put(&path);
out:
set_fs(saved_fs);
- return (-rc);
+ return (-rc);
} /* vn_set_pwd() */
EXPORT_SYMBOL(vn_set_pwd);
file_t *fp = buf;
atomic_set(&fp->f_ref, 0);
- mutex_init(&fp->f_lock, NULL, MUTEX_DEFAULT, NULL);
+ mutex_init(&fp->f_lock, NULL, MUTEX_DEFAULT, NULL);
INIT_LIST_HEAD(&fp->f_list);
- return (0);
-} /* file_cache_constructor() */
+ return (0);
+} /* vn_file_cache_constructor() */
static void
vn_file_cache_destructor(void *buf, void *cdrarg)
spl_vn_init(void)
{
vn_cache = kmem_cache_create("spl_vn_cache",
- sizeof(struct vnode), 64,
- vn_cache_constructor,
- vn_cache_destructor,
- NULL, NULL, NULL, 0);
+ sizeof (struct vnode), 64, vn_cache_constructor,
+ vn_cache_destructor, NULL, NULL, NULL, 0);
vn_file_cache = kmem_cache_create("spl_vn_file_cache",
- sizeof(file_t), 64,
- vn_file_cache_constructor,
- vn_file_cache_destructor,
- NULL, NULL, NULL, 0);
+ sizeof (file_t), 64, vn_file_cache_constructor,
+ vn_file_cache_destructor, NULL, NULL, NULL, 0);
+
return (0);
-} /* vn_init() */
+} /* spl_vn_init() */
void
spl_vn_fini(void)
{
- file_t *fp, *next_fp;
+ file_t *fp, *next_fp;
int leaked = 0;
spin_lock(&vn_file_lock);
- list_for_each_entry_safe(fp, next_fp, &vn_file_list, f_list) {
- list_del(&fp->f_list);
+ list_for_each_entry_safe(fp, next_fp, &vn_file_list, f_list) {
+ list_del(&fp->f_list);
releasef_locked(fp);
leaked++;
}
kmem_cache_destroy(vn_file_cache);
kmem_cache_destroy(vn_cache);
-
- return;
-} /* vn_fini() */
+} /* spl_vn_fini() */
*
* You should have received a copy of the GNU General Public License along
* with the SPL. If not, see <http://www.gnu.org/licenses/>.
- *****************************************************************************
+ *
* Solaris Porting Layer (SPL) XDR Implementation.
\*****************************************************************************/
static bool_t
xdrmem_control(XDR *xdrs, int req, void *info)
{
- struct xdr_bytesrec *rec = (struct xdr_bytesrec *) info;
+ struct xdr_bytesrec *rec = (struct xdr_bytesrec *)info;
if (req != XDR_GET_BYTES_AVAIL)
- return FALSE;
+ return (FALSE);
rec->xc_is_last_record = TRUE; /* always TRUE in xdrmem streams */
rec->xc_num_avail = xdrs->x_addr_end - xdrs->x_addr;
- return TRUE;
+ return (TRUE);
}
static bool_t
uint_t pad;
if (size < cnt)
- return FALSE; /* Integer overflow */
+ return (FALSE); /* Integer overflow */
if (xdrs->x_addr > xdrs->x_addr_end)
- return FALSE;
+ return (FALSE);
if (xdrs->x_addr_end - xdrs->x_addr < size)
- return FALSE;
+ return (FALSE);
memcpy(xdrs->x_addr, cp, cnt);
xdrs->x_addr += pad;
}
- return TRUE;
+ return (TRUE);
}
static bool_t
uint_t pad;
if (size < cnt)
- return FALSE; /* Integer overflow */
+ return (FALSE); /* Integer overflow */
if (xdrs->x_addr > xdrs->x_addr_end)
- return FALSE;
+ return (FALSE);
if (xdrs->x_addr_end - xdrs->x_addr < size)
- return FALSE;
+ return (FALSE);
memcpy(cp, xdrs->x_addr, cnt);
xdrs->x_addr += cnt;
if (pad > 0) {
/* An inverted memchr() would be useful here... */
if (memcmp(&zero, xdrs->x_addr, pad) != 0)
- return FALSE;
+ return (FALSE);
xdrs->x_addr += pad;
}
- return TRUE;
+ return (TRUE);
}
static bool_t
xdrmem_enc_uint32(XDR *xdrs, uint32_t val)
{
- if (xdrs->x_addr + sizeof(uint32_t) > xdrs->x_addr_end)
- return FALSE;
+ if (xdrs->x_addr + sizeof (uint32_t) > xdrs->x_addr_end)
+ return (FALSE);
- *((uint32_t *) xdrs->x_addr) = cpu_to_be32(val);
+ *((uint32_t *)xdrs->x_addr) = cpu_to_be32(val);
- xdrs->x_addr += sizeof(uint32_t);
+ xdrs->x_addr += sizeof (uint32_t);
- return TRUE;
+ return (TRUE);
}
static bool_t
xdrmem_dec_uint32(XDR *xdrs, uint32_t *val)
{
- if (xdrs->x_addr + sizeof(uint32_t) > xdrs->x_addr_end)
- return FALSE;
+ if (xdrs->x_addr + sizeof (uint32_t) > xdrs->x_addr_end)
+ return (FALSE);
- *val = be32_to_cpu(*((uint32_t *) xdrs->x_addr));
+ *val = be32_to_cpu(*((uint32_t *)xdrs->x_addr));
- xdrs->x_addr += sizeof(uint32_t);
+ xdrs->x_addr += sizeof (uint32_t);
- return TRUE;
+ return (TRUE);
}
static bool_t
{
uint32_t val;
- BUILD_BUG_ON(sizeof(char) != 1);
+ BUILD_BUG_ON(sizeof (char) != 1);
val = *((unsigned char *) cp);
- return xdrmem_enc_uint32(xdrs, val);
+ return (xdrmem_enc_uint32(xdrs, val));
}
static bool_t
{
uint32_t val;
- BUILD_BUG_ON(sizeof(char) != 1);
+ BUILD_BUG_ON(sizeof (char) != 1);
if (!xdrmem_dec_uint32(xdrs, &val))
- return FALSE;
+ return (FALSE);
/*
* If any of the 3 other bytes are non-zero then val will be greater
* not have a char encoded in it.
*/
if (val > 0xff)
- return FALSE;
+ return (FALSE);
*((unsigned char *) cp) = val;
- return TRUE;
+ return (TRUE);
}
static bool_t
xdrmem_enc_ushort(XDR *xdrs, unsigned short *usp)
{
- BUILD_BUG_ON(sizeof(unsigned short) != 2);
+ BUILD_BUG_ON(sizeof (unsigned short) != 2);
- return xdrmem_enc_uint32(xdrs, *usp);
+ return (xdrmem_enc_uint32(xdrs, *usp));
}
static bool_t
{
uint32_t val;
- BUILD_BUG_ON(sizeof(unsigned short) != 2);
+ BUILD_BUG_ON(sizeof (unsigned short) != 2);
if (!xdrmem_dec_uint32(xdrs, &val))
- return FALSE;
+ return (FALSE);
/*
* Short ints are not in the RFC, but we assume similar logic as in
* xdrmem_dec_char().
*/
if (val > 0xffff)
- return FALSE;
+ return (FALSE);
*usp = val;
- return TRUE;
+ return (TRUE);
}
static bool_t
xdrmem_enc_uint(XDR *xdrs, unsigned *up)
{
- BUILD_BUG_ON(sizeof(unsigned) != 4);
+ BUILD_BUG_ON(sizeof (unsigned) != 4);
- return xdrmem_enc_uint32(xdrs, *up);
+ return (xdrmem_enc_uint32(xdrs, *up));
}
static bool_t
xdrmem_dec_uint(XDR *xdrs, unsigned *up)
{
- BUILD_BUG_ON(sizeof(unsigned) != 4);
+ BUILD_BUG_ON(sizeof (unsigned) != 4);
- return xdrmem_dec_uint32(xdrs, (uint32_t *) up);
+ return (xdrmem_dec_uint32(xdrs, (uint32_t *)up));
}
static bool_t
xdrmem_enc_ulonglong(XDR *xdrs, u_longlong_t *ullp)
{
- BUILD_BUG_ON(sizeof(u_longlong_t) != 8);
+ BUILD_BUG_ON(sizeof (u_longlong_t) != 8);
if (!xdrmem_enc_uint32(xdrs, *ullp >> 32))
- return FALSE;
+ return (FALSE);
- return xdrmem_enc_uint32(xdrs, *ullp & 0xffffffff);
+ return (xdrmem_enc_uint32(xdrs, *ullp & 0xffffffff));
}
static bool_t
{
uint32_t low, high;
- BUILD_BUG_ON(sizeof(u_longlong_t) != 8);
+ BUILD_BUG_ON(sizeof (u_longlong_t) != 8);
if (!xdrmem_dec_uint32(xdrs, &high))
- return FALSE;
+ return (FALSE);
if (!xdrmem_dec_uint32(xdrs, &low))
- return FALSE;
+ return (FALSE);
- *ullp = ((u_longlong_t) high << 32) | low;
+ *ullp = ((u_longlong_t)high << 32) | low;
- return TRUE;
+ return (TRUE);
}
static bool_t
caddr_t addr = *arrp;
if (*sizep > maxsize || *sizep > UINT_MAX / elsize)
- return FALSE;
+ return (FALSE);
if (!xdrmem_enc_uint(xdrs, sizep))
- return FALSE;
+ return (FALSE);
for (i = 0; i < *sizep; i++) {
if (!elproc(xdrs, addr))
- return FALSE;
+ return (FALSE);
addr += elsize;
}
- return TRUE;
+ return (TRUE);
}
static bool_t
caddr_t addr;
if (!xdrmem_dec_uint(xdrs, sizep))
- return FALSE;
+ return (FALSE);
size = *sizep;
if (size > maxsize || size > UINT_MAX / elsize)
- return FALSE;
+ return (FALSE);
/*
* The Solaris man page says: "If *arrp is NULL when decoding,
* xdr_array() allocates memory and *arrp points to it".
*/
if (*arrp == NULL) {
- BUILD_BUG_ON(sizeof(uint_t) > sizeof(size_t));
+ BUILD_BUG_ON(sizeof (uint_t) > sizeof (size_t));
*arrp = kmem_alloc(size * elsize, KM_NOSLEEP);
if (*arrp == NULL)
- return FALSE;
+ return (FALSE);
alloc = TRUE;
}
if (!elproc(xdrs, addr)) {
if (alloc)
kmem_free(*arrp, size * elsize);
- return FALSE;
+ return (FALSE);
}
addr += elsize;
}
- return TRUE;
+ return (TRUE);
}
static bool_t
uint_t len;
if (slen > maxsize)
- return FALSE;
+ return (FALSE);
len = slen;
if (!xdrmem_enc_uint(xdrs, &len))
- return FALSE;
+ return (FALSE);
- return xdrmem_enc_bytes(xdrs, *sp, len);
+ return (xdrmem_enc_bytes(xdrs, *sp, len));
}
static bool_t
bool_t alloc = FALSE;
if (!xdrmem_dec_uint(xdrs, &size))
- return FALSE;
+ return (FALSE);
if (size > maxsize || size > UINT_MAX - 1)
- return FALSE;
+ return (FALSE);
/*
* Solaris man page: "If *sp is NULL when decoding, xdr_string()
* allocates memory and *sp points to it".
*/
if (*sp == NULL) {
- BUILD_BUG_ON(sizeof(uint_t) > sizeof(size_t));
+ BUILD_BUG_ON(sizeof (uint_t) > sizeof (size_t));
*sp = kmem_alloc(size + 1, KM_NOSLEEP);
if (*sp == NULL)
- return FALSE;
+ return (FALSE);
alloc = TRUE;
}
(*sp)[size] = '\0';
- return TRUE;
+ return (TRUE);
fail:
if (alloc)
kmem_free(*sp, size + 1);
- return FALSE;
+ return (FALSE);
}
static struct xdr_ops xdrmem_encode_ops = {
- .xdr_control = xdrmem_control,
- .xdr_char = xdrmem_enc_char,
- .xdr_u_short = xdrmem_enc_ushort,
- .xdr_u_int = xdrmem_enc_uint,
- .xdr_u_longlong_t = xdrmem_enc_ulonglong,
- .xdr_opaque = xdrmem_enc_bytes,
- .xdr_string = xdr_enc_string,
- .xdr_array = xdr_enc_array
+ .xdr_control = xdrmem_control,
+ .xdr_char = xdrmem_enc_char,
+ .xdr_u_short = xdrmem_enc_ushort,
+ .xdr_u_int = xdrmem_enc_uint,
+ .xdr_u_longlong_t = xdrmem_enc_ulonglong,
+ .xdr_opaque = xdrmem_enc_bytes,
+ .xdr_string = xdr_enc_string,
+ .xdr_array = xdr_enc_array
};
static struct xdr_ops xdrmem_decode_ops = {
- .xdr_control = xdrmem_control,
- .xdr_char = xdrmem_dec_char,
- .xdr_u_short = xdrmem_dec_ushort,
- .xdr_u_int = xdrmem_dec_uint,
- .xdr_u_longlong_t = xdrmem_dec_ulonglong,
- .xdr_opaque = xdrmem_dec_bytes,
- .xdr_string = xdr_dec_string,
- .xdr_array = xdr_dec_array
+ .xdr_control = xdrmem_control,
+ .xdr_char = xdrmem_dec_char,
+ .xdr_u_short = xdrmem_dec_ushort,
+ .xdr_u_int = xdrmem_dec_uint,
+ .xdr_u_longlong_t = xdrmem_dec_ulonglong,
+ .xdr_opaque = xdrmem_dec_bytes,
+ .xdr_string = xdr_dec_string,
+ .xdr_array = xdr_dec_array
};
-
*
* You should have received a copy of the GNU General Public License along
* with the SPL. If not, see <http://www.gnu.org/licenses/>.
- *****************************************************************************
+ *
+ *
* z_compress_level/z_uncompress are nearly identical copies of the
* compress2/uncompress functions provided by the official zlib package
* available at http://zlib.net/. The only changes made we to slightly
static void *
zlib_workspace_alloc(int flags)
{
- return kmem_cache_alloc(zlib_workspace_cache, flags & ~(__GFP_FS));
+ return (kmem_cache_alloc(zlib_workspace_cache, flags & ~(__GFP_FS)));
}
static void
*/
int
z_compress_level(void *dest, size_t *destLen, const void *source,
- size_t sourceLen, int level)
+ size_t sourceLen, int level)
{
z_stream stream;
int err;
stream.avail_out = (uInt)*destLen;
if ((size_t)stream.avail_out != *destLen)
- return Z_BUF_ERROR;
+ return (Z_BUF_ERROR);
stream.workspace = zlib_workspace_alloc(KM_SLEEP);
if (!stream.workspace)
- return Z_MEM_ERROR;
+ return (Z_MEM_ERROR);
err = zlib_deflateInit(&stream, level);
if (err != Z_OK) {
zlib_workspace_free(stream.workspace);
- return err;
+ return (err);
}
err = zlib_deflate(&stream, Z_FINISH);
if (err != Z_STREAM_END) {
zlib_deflateEnd(&stream);
zlib_workspace_free(stream.workspace);
- return err == Z_OK ? Z_BUF_ERROR : err;
+ return (err == Z_OK ? Z_BUF_ERROR : err);
}
*destLen = stream.total_out;
err = zlib_deflateEnd(&stream);
zlib_workspace_free(stream.workspace);
- return err;
+ return (err);
}
EXPORT_SYMBOL(z_compress_level);
stream.avail_out = (uInt)*destLen;
if ((size_t)stream.avail_out != *destLen)
- return Z_BUF_ERROR;
+ return (Z_BUF_ERROR);
stream.workspace = zlib_workspace_alloc(KM_SLEEP);
if (!stream.workspace)
- return Z_MEM_ERROR;
+ return (Z_MEM_ERROR);
err = zlib_inflateInit(&stream);
if (err != Z_OK) {
zlib_workspace_free(stream.workspace);
- return err;
+ return (err);
}
err = zlib_inflate(&stream, Z_FINISH);
zlib_workspace_free(stream.workspace);
if (err == Z_NEED_DICT ||
- (err == Z_BUF_ERROR && stream.avail_in == 0))
- return Z_DATA_ERROR;
+ (err == Z_BUF_ERROR && stream.avail_in == 0))
+ return (Z_DATA_ERROR);
- return err;
+ return (err);
}
*destLen = stream.total_out;
err = zlib_inflateEnd(&stream);
zlib_workspace_free(stream.workspace);
- return err;
+ return (err);
}
EXPORT_SYMBOL(z_uncompress);
"spl_zlib_workspace_cache",
size, 0, NULL, NULL, NULL, NULL, NULL,
KMC_VMEM | KMC_NOEMERGENCY);
- if (!zlib_workspace_cache)
+ if (!zlib_workspace_cache)
return (1);
- return (0);
+ return (0);
}
void
spl_zlib_fini(void)
{
kmem_cache_destroy(zlib_workspace_cache);
- zlib_workspace_cache = NULL;
+ zlib_workspace_cache = NULL;
}
--- /dev/null
+#include <linux/module.h>
+#include <linux/vermagic.h>
+#include <linux/compiler.h>
+
+MODULE_INFO(vermagic, VERMAGIC_STRING);
+
+struct module __this_module
+__attribute__((section(".gnu.linkonce.this_module"))) = {
+ .name = KBUILD_MODNAME,
+ .init = init_module,
+#ifdef CONFIG_MODULE_UNLOAD
+ .exit = cleanup_module,
+#endif
+ .arch = MODULE_ARCH_INIT,
+};
+
+static const struct modversion_info ____versions[]
+__used
+__attribute__((section("__versions"))) = {
+ { 0x28950ef1, __VMLINUX_SYMBOL_STR(module_layout) },
+ { 0x6a5fa363, __VMLINUX_SYMBOL_STR(sigprocmask) },
+ { 0xacfa5975, __VMLINUX_SYMBOL_STR(kmem_cache_destroy) },
+ { 0x98ab5c8d, __VMLINUX_SYMBOL_STR(kmalloc_caches) },
+ { 0x65e75cb6, __VMLINUX_SYMBOL_STR(__list_del_entry) },
+ { 0xd2b09ce5, __VMLINUX_SYMBOL_STR(__kmalloc) },
+ { 0x5aeb145f, __VMLINUX_SYMBOL_STR(complete_and_exit) },
+ { 0x107e5878, __VMLINUX_SYMBOL_STR(zlib_inflateEnd) },
+ { 0x1ed8b599, __VMLINUX_SYMBOL_STR(__x86_indirect_thunk_r8) },
+ { 0xf5893abf, __VMLINUX_SYMBOL_STR(up_read) },
+ { 0x4c4fef19, __VMLINUX_SYMBOL_STR(kernel_stack) },
+ { 0x784213a6, __VMLINUX_SYMBOL_STR(pv_lock_ops) },
+ { 0x628121e9, __VMLINUX_SYMBOL_STR(register_sysctl_table) },
+ { 0x68cd4849, __VMLINUX_SYMBOL_STR(inode_permission) },
+ { 0x4b7dcf38, __VMLINUX_SYMBOL_STR(_raw_qspin_lock) },
+ { 0x15692c87, __VMLINUX_SYMBOL_STR(param_ops_int) },
+ { 0xa0fbac79, __VMLINUX_SYMBOL_STR(wake_up_bit) },
+ { 0x754d539c, __VMLINUX_SYMBOL_STR(strlen) },
+ { 0x257f3887, __VMLINUX_SYMBOL_STR(seq_open) },
+ { 0xc8b57c27, __VMLINUX_SYMBOL_STR(autoremove_wake_function) },
+ { 0x263ed23b, __VMLINUX_SYMBOL_STR(__x86_indirect_thunk_r12) },
+ { 0x930484aa, __VMLINUX_SYMBOL_STR(cpu_online_mask) },
+ { 0x79aa04a2, __VMLINUX_SYMBOL_STR(get_random_bytes) },
+ { 0xb5dcab5b, __VMLINUX_SYMBOL_STR(remove_wait_queue) },
+ { 0x50612798, __VMLINUX_SYMBOL_STR(seq_puts) },
+ { 0xd067fc5c, __VMLINUX_SYMBOL_STR(proc_dointvec) },
+ { 0xb54533f7, __VMLINUX_SYMBOL_STR(usecs_to_jiffies) },
+ { 0x20000329, __VMLINUX_SYMBOL_STR(simple_strtoul) },
+ { 0xc0a3d105, __VMLINUX_SYMBOL_STR(find_next_bit) },
+ { 0x74df1d4, __VMLINUX_SYMBOL_STR(seq_printf) },
+ { 0xa16aae11, __VMLINUX_SYMBOL_STR(remove_proc_entry) },
+ { 0x61aa871a, __VMLINUX_SYMBOL_STR(filp_close) },
+ { 0x593a99b, __VMLINUX_SYMBOL_STR(init_timer_key) },
+ { 0xf8983de7, __VMLINUX_SYMBOL_STR(prepare_to_wait_exclusive) },
+ { 0x4ed12f73, __VMLINUX_SYMBOL_STR(mutex_unlock) },
+ { 0x6def63e1, __VMLINUX_SYMBOL_STR(vfs_fsync) },
+ { 0x999e8297, __VMLINUX_SYMBOL_STR(vfree) },
+ { 0x54efb5d6, __VMLINUX_SYMBOL_STR(cpu_number) },
+ { 0x95dad3f2, __VMLINUX_SYMBOL_STR(path_get) },
+ { 0x9c3df9b4, __VMLINUX_SYMBOL_STR(seq_read) },
+ { 0xc35e4b4e, __VMLINUX_SYMBOL_STR(kthread_create_on_node) },
+ { 0x7d11c268, __VMLINUX_SYMBOL_STR(jiffies) },
+ { 0x343a1a8, __VMLINUX_SYMBOL_STR(__list_add) },
+ { 0x57a6ccd0, __VMLINUX_SYMBOL_STR(down_read) },
+ { 0xe2d5255a, __VMLINUX_SYMBOL_STR(strcmp) },
+ { 0xd2258c, __VMLINUX_SYMBOL_STR(kthread_bind) },
+ { 0xf432dd3d, __VMLINUX_SYMBOL_STR(__init_waitqueue_head) },
+ { 0x71de9b3f, __VMLINUX_SYMBOL_STR(_copy_to_user) },
+ { 0xffd5a395, __VMLINUX_SYMBOL_STR(default_wake_function) },
+ { 0x44f0d59d, __VMLINUX_SYMBOL_STR(PDE_DATA) },
+ { 0xfe7c4287, __VMLINUX_SYMBOL_STR(nr_cpu_ids) },
+ { 0x35b6b772, __VMLINUX_SYMBOL_STR(param_ops_charp) },
+ { 0x8062d53f, __VMLINUX_SYMBOL_STR(vfs_read) },
+ { 0xd5f2172f, __VMLINUX_SYMBOL_STR(del_timer_sync) },
+ { 0xfb578fc5, __VMLINUX_SYMBOL_STR(memset) },
+ { 0x73839c7a, __VMLINUX_SYMBOL_STR(proc_mkdir) },
+ { 0x11089ac7, __VMLINUX_SYMBOL_STR(_ctype) },
+ { 0x8f64aa4, __VMLINUX_SYMBOL_STR(_raw_spin_unlock_irqrestore) },
+ { 0xb8c7ff88, __VMLINUX_SYMBOL_STR(current_task) },
+ { 0x9a025cd5, __VMLINUX_SYMBOL_STR(__mutex_init) },
+ { 0x27e1a049, __VMLINUX_SYMBOL_STR(printk) },
+ { 0xe15f42bb, __VMLINUX_SYMBOL_STR(_raw_spin_trylock) },
+ { 0x42f90a31, __VMLINUX_SYMBOL_STR(kthread_stop) },
+ { 0x449ad0a7, __VMLINUX_SYMBOL_STR(memcmp) },
+ { 0x7c1372e8, __VMLINUX_SYMBOL_STR(panic) },
+ { 0xe7b00dfb, __VMLINUX_SYMBOL_STR(__x86_indirect_thunk_r13) },
+ { 0xa1c76e0a, __VMLINUX_SYMBOL_STR(_cond_resched) },
+ { 0x4d9b652b, __VMLINUX_SYMBOL_STR(rb_erase) },
+ { 0x9166fada, __VMLINUX_SYMBOL_STR(strncpy) },
+ { 0x9725b589, __VMLINUX_SYMBOL_STR(proc_doulongvec_minmax) },
+ { 0xce5ac24f, __VMLINUX_SYMBOL_STR(zlib_inflate_workspacesize) },
+ { 0x5a921311, __VMLINUX_SYMBOL_STR(strncmp) },
+ { 0x5792f848, __VMLINUX_SYMBOL_STR(strlcpy) },
+ { 0x19ee3d71, __VMLINUX_SYMBOL_STR(kmem_cache_free) },
+ { 0x93a6e0b2, __VMLINUX_SYMBOL_STR(io_schedule) },
+ { 0x16305289, __VMLINUX_SYMBOL_STR(warn_slowpath_null) },
+ { 0x9abdea30, __VMLINUX_SYMBOL_STR(mutex_lock) },
+ { 0x521445b, __VMLINUX_SYMBOL_STR(list_del) },
+ { 0x1e6d26a8, __VMLINUX_SYMBOL_STR(strstr) },
+ { 0xce8b1878, __VMLINUX_SYMBOL_STR(__x86_indirect_thunk_r14) },
+ { 0xbe2c0274, __VMLINUX_SYMBOL_STR(add_timer) },
+ { 0xf0f1246c, __VMLINUX_SYMBOL_STR(kvasprintf) },
+ { 0xa07a37f0, __VMLINUX_SYMBOL_STR(memchr) },
+ { 0x5a0b73d0, __VMLINUX_SYMBOL_STR(zlib_deflateInit2) },
+ { 0x3b4ceb4a, __VMLINUX_SYMBOL_STR(up_write) },
+ { 0xe6e3b875, __VMLINUX_SYMBOL_STR(down_write) },
+ { 0xcd1850f2, __VMLINUX_SYMBOL_STR(fput) },
+ { 0xf82cfd1a, __VMLINUX_SYMBOL_STR(proc_dostring) },
+ { 0xc5ed6853, __VMLINUX_SYMBOL_STR(flush_signals) },
+ { 0x581f98da, __VMLINUX_SYMBOL_STR(zlib_inflate) },
+ { 0x16e297c3, __VMLINUX_SYMBOL_STR(bit_wait) },
+ { 0x9f984513, __VMLINUX_SYMBOL_STR(strrchr) },
+ { 0xd11b7a3e, __VMLINUX_SYMBOL_STR(kmem_cache_alloc) },
+ { 0x78764f4e, __VMLINUX_SYMBOL_STR(pv_irq_ops) },
+ { 0xb601be4c, __VMLINUX_SYMBOL_STR(__x86_indirect_thunk_rdx) },
+ { 0x618911fc, __VMLINUX_SYMBOL_STR(numa_node) },
+ { 0xc50bab05, __VMLINUX_SYMBOL_STR(unregister_shrinker) },
+ { 0xa916b694, __VMLINUX_SYMBOL_STR(strnlen) },
+ { 0xac3d20e2, __VMLINUX_SYMBOL_STR(unregister_sysctl_table) },
+ { 0x93fca811, __VMLINUX_SYMBOL_STR(__get_free_pages) },
+ { 0xe9f7149c, __VMLINUX_SYMBOL_STR(zlib_deflate_workspacesize) },
+ { 0xf0fdf6cb, __VMLINUX_SYMBOL_STR(__stack_chk_fail) },
+ { 0xc311ec22, __VMLINUX_SYMBOL_STR(cpu_possible_mask) },
+ { 0x9cb986f2, __VMLINUX_SYMBOL_STR(vmalloc_base) },
+ { 0xe200d2d5, __VMLINUX_SYMBOL_STR(param_get_uint) },
+ { 0xd62c833f, __VMLINUX_SYMBOL_STR(schedule_timeout) },
+ { 0x1000e51, __VMLINUX_SYMBOL_STR(schedule) },
+ { 0x79a38e61, __VMLINUX_SYMBOL_STR(___ratelimit) },
+ { 0x6b2dc060, __VMLINUX_SYMBOL_STR(dump_stack) },
+ { 0x2ea2c95c, __VMLINUX_SYMBOL_STR(__x86_indirect_thunk_rax) },
+ { 0xe65cdceb, __VMLINUX_SYMBOL_STR(wake_up_process) },
+ { 0x9a5349f3, __VMLINUX_SYMBOL_STR(__put_cred) },
+ { 0xf8489fcd, __VMLINUX_SYMBOL_STR(user_path_at) },
+ { 0xbdfb6dbb, __VMLINUX_SYMBOL_STR(__fentry__) },
+ { 0x91242962, __VMLINUX_SYMBOL_STR(path_put) },
+ { 0x123f82f3, __VMLINUX_SYMBOL_STR(getrawmonotonic64) },
+ { 0x41ec4c1a, __VMLINUX_SYMBOL_STR(kmem_cache_alloc_trace) },
+ { 0xd94cc09, __VMLINUX_SYMBOL_STR(__per_cpu_offset) },
+ { 0x9327f5ce, __VMLINUX_SYMBOL_STR(_raw_spin_lock_irqsave) },
+ { 0xa5526619, __VMLINUX_SYMBOL_STR(rb_insert_color) },
+ { 0xaf5517a9, __VMLINUX_SYMBOL_STR(kmem_cache_create) },
+ { 0x35a88f28, __VMLINUX_SYMBOL_STR(zlib_inflateInit2) },
+ { 0xf2c43f3f, __VMLINUX_SYMBOL_STR(zlib_deflate) },
+ { 0x99195078, __VMLINUX_SYMBOL_STR(vsnprintf) },
+ { 0x4302d0eb, __VMLINUX_SYMBOL_STR(free_pages) },
+ { 0xcf21d241, __VMLINUX_SYMBOL_STR(__wake_up) },
+ { 0xb3f7646e, __VMLINUX_SYMBOL_STR(kthread_should_stop) },
+ { 0xe8a73aaf, __VMLINUX_SYMBOL_STR(out_of_line_wait_on_bit) },
+ { 0x8c34c149, __VMLINUX_SYMBOL_STR(proc_create_data) },
+ { 0x65bbbc78, __VMLINUX_SYMBOL_STR(schedule_hrtimeout_range) },
+ { 0x1685c91c, __VMLINUX_SYMBOL_STR(seq_lseek) },
+ { 0xa9bd2676, __VMLINUX_SYMBOL_STR(__vmalloc) },
+ { 0x9c55cec, __VMLINUX_SYMBOL_STR(schedule_timeout_interruptible) },
+ { 0x37a0cba, __VMLINUX_SYMBOL_STR(kfree) },
+ { 0x69acdf38, __VMLINUX_SYMBOL_STR(memcpy) },
+ { 0x5c8b5ce8, __VMLINUX_SYMBOL_STR(prepare_to_wait) },
+ { 0x8bfe8c57, __VMLINUX_SYMBOL_STR(param_set_uint) },
+ { 0x9518b623, __VMLINUX_SYMBOL_STR(register_shrinker) },
+ { 0x889c0220, __VMLINUX_SYMBOL_STR(set_user_nice) },
+ { 0xee46885d, __VMLINUX_SYMBOL_STR(add_wait_queue_exclusive) },
+ { 0x9185525, __VMLINUX_SYMBOL_STR(fget) },
+ { 0x7628f3c7, __VMLINUX_SYMBOL_STR(this_cpu_off) },
+ { 0xc890c008, __VMLINUX_SYMBOL_STR(zlib_deflateEnd) },
+ { 0xfa66f77c, __VMLINUX_SYMBOL_STR(finish_wait) },
+ { 0x4cbbd171, __VMLINUX_SYMBOL_STR(__bitmap_weight) },
+ { 0x55f5019b, __VMLINUX_SYMBOL_STR(__kmalloc_node) },
+ { 0x28318305, __VMLINUX_SYMBOL_STR(snprintf) },
+ { 0x4f897611, __VMLINUX_SYMBOL_STR(seq_release) },
+ { 0xb0e602eb, __VMLINUX_SYMBOL_STR(memmove) },
+ { 0xfbc4f89e, __VMLINUX_SYMBOL_STR(io_schedule_timeout) },
+ { 0x5541ea93, __VMLINUX_SYMBOL_STR(on_each_cpu) },
+ { 0xc26151de, __VMLINUX_SYMBOL_STR(vfs_getattr) },
+ { 0x77e2f33, __VMLINUX_SYMBOL_STR(_copy_from_user) },
+ { 0xe5d95985, __VMLINUX_SYMBOL_STR(param_ops_ulong) },
+ { 0x6d044c26, __VMLINUX_SYMBOL_STR(param_ops_uint) },
+ { 0x2a6e6109, __VMLINUX_SYMBOL_STR(__init_rwsem) },
+ { 0xc9bf2a38, __VMLINUX_SYMBOL_STR(vfs_write) },
+ { 0x9c7c731b, __VMLINUX_SYMBOL_STR(filp_open) },
+};
+
+static const char __module_depends[]
+__used
+__attribute__((section(".modinfo"))) =
+"depends=";
+
+
+MODULE_INFO(srcversion, "2080768537B4B3B2FA210A5");
+MODULE_INFO(rhelversion, "7.4");
+#ifdef RETPOLINE
+ MODULE_INFO(retpoline, "Y");
+#endif
#define SPLAT_VNODE_TEST3_NAME "vn_rdwr"
#define SPLAT_VNODE_TEST3_DESC "Vn_rdwrt Test"
-#define SPLAT_VNODE_TEST4_ID 0x0904
-#define SPLAT_VNODE_TEST4_NAME "vn_rename"
-#define SPLAT_VNODE_TEST4_DESC "Vn_rename Test"
-
#define SPLAT_VNODE_TEST5_ID 0x0905
#define SPLAT_VNODE_TEST5_NAME "vn_getattr"
#define SPLAT_VNODE_TEST5_DESC "Vn_getattr Test"
out:
VOP_CLOSE(vp, 0, 0, 0, 0, 0);
- vn_remove(SPLAT_VNODE_TEST_FILE_RW, UIO_SYSSPACE, RMFILE);
return -rc;
} /* splat_vnode_test3() */
-#if LINUX_VERSION_CODE <= KERNEL_VERSION(4,1,0)
-static int
-splat_vnode_test4(struct file *file, void *arg)
-{
- vnode_t *vp;
- char buf1[32] = "SPL VNode Interface Test File\n";
- char buf2[32] = "";
- int rc;
-
- if ((rc = splat_vnode_unlink_all(file, arg, SPLAT_VNODE_TEST4_NAME)))
- return rc;
-
- if ((rc = vn_open(SPLAT_VNODE_TEST_FILE_RW1, UIO_SYSSPACE,
- FWRITE | FREAD | FCREAT | FEXCL, 0644, &vp, 0, 0))) {
- splat_vprint(file, SPLAT_VNODE_TEST4_NAME,
- "Failed to vn_open test file: %s (%d)\n",
- SPLAT_VNODE_TEST_FILE_RW1, rc);
- goto out;
- }
-
- rc = vn_rdwr(UIO_WRITE, vp, buf1, strlen(buf1), 0,
- UIO_SYSSPACE, 0, RLIM64_INFINITY, 0, NULL);
- if (rc) {
- splat_vprint(file, SPLAT_VNODE_TEST4_NAME,
- "Failed vn_rdwr write of test file: %s (%d)\n",
- SPLAT_VNODE_TEST_FILE_RW1, rc);
- goto out2;
- }
-
- VOP_CLOSE(vp, 0, 0, 0, 0, 0);
-
- rc = vn_rename(SPLAT_VNODE_TEST_FILE_RW1,SPLAT_VNODE_TEST_FILE_RW2,0);
- if (rc) {
- splat_vprint(file, SPLAT_VNODE_TEST4_NAME, "Failed vn_rename "
- "%s -> %s (%d)\n",
- SPLAT_VNODE_TEST_FILE_RW1,
- SPLAT_VNODE_TEST_FILE_RW2, rc);
- goto out;
- }
-
- if ((rc = vn_open(SPLAT_VNODE_TEST_FILE_RW2, UIO_SYSSPACE,
- FREAD | FEXCL, 0644, &vp, 0, 0))) {
- splat_vprint(file, SPLAT_VNODE_TEST4_NAME,
- "Failed to vn_open test file: %s (%d)\n",
- SPLAT_VNODE_TEST_FILE_RW2, rc);
- goto out;
- }
-
- rc = vn_rdwr(UIO_READ, vp, buf2, strlen(buf1), 0,
- UIO_SYSSPACE, 0, RLIM64_INFINITY, 0, NULL);
- if (rc) {
- splat_vprint(file, SPLAT_VNODE_TEST4_NAME,
- "Failed vn_rdwr read of test file: %s (%d)\n",
- SPLAT_VNODE_TEST_FILE_RW2, rc);
- goto out2;
- }
-
- if (strncmp(buf1, buf2, strlen(buf1))) {
- rc = EINVAL;
- splat_vprint(file, SPLAT_VNODE_TEST4_NAME,
- "Failed strncmp data written does not match "
- "data read\nWrote: %sRead: %s\n", buf1, buf2);
- goto out2;
- }
-
- rc = 0;
- splat_vprint(file, SPLAT_VNODE_TEST4_NAME, "Wrote to %s: %s",
- SPLAT_VNODE_TEST_FILE_RW1, buf1);
- splat_vprint(file, SPLAT_VNODE_TEST4_NAME, "Read from %s: %s",
- SPLAT_VNODE_TEST_FILE_RW2, buf2);
- splat_vprint(file, SPLAT_VNODE_TEST4_NAME, "Successfully renamed "
- "test file %s -> %s and verified data pattern\n",
- SPLAT_VNODE_TEST_FILE_RW1, SPLAT_VNODE_TEST_FILE_RW2);
-out2:
- VOP_CLOSE(vp, 0, 0, 0, 0, 0);
-out:
- vn_remove(SPLAT_VNODE_TEST_FILE_RW1, UIO_SYSSPACE, RMFILE);
- vn_remove(SPLAT_VNODE_TEST_FILE_RW2, UIO_SYSSPACE, RMFILE);
-
- return -rc;
-} /* splat_vnode_test4() */
-#endif
-
static int
splat_vnode_test5(struct file *file, void *arg)
{
"fsync'ed test file %s\n", SPLAT_VNODE_TEST_FILE_RW);
out:
VOP_CLOSE(vp, 0, 0, 0, 0, 0);
- vn_remove(SPLAT_VNODE_TEST_FILE_RW, UIO_SYSSPACE, RMFILE);
return -rc;
} /* splat_vnode_test6() */
SPLAT_VNODE_TEST2_ID, splat_vnode_test2);
splat_test_init(sub, SPLAT_VNODE_TEST3_NAME, SPLAT_VNODE_TEST3_DESC,
SPLAT_VNODE_TEST3_ID, splat_vnode_test3);
-#if LINUX_VERSION_CODE <= KERNEL_VERSION(4,1,0)
- splat_test_init(sub, SPLAT_VNODE_TEST4_NAME, SPLAT_VNODE_TEST4_DESC,
- SPLAT_VNODE_TEST4_ID, splat_vnode_test4);
-#endif
splat_test_init(sub, SPLAT_VNODE_TEST5_NAME, SPLAT_VNODE_TEST5_DESC,
SPLAT_VNODE_TEST5_ID, splat_vnode_test5);
splat_test_init(sub, SPLAT_VNODE_TEST6_NAME, SPLAT_VNODE_TEST6_DESC,
splat_test_fini(sub, SPLAT_VNODE_TEST6_ID);
splat_test_fini(sub, SPLAT_VNODE_TEST5_ID);
-#if LINUX_VERSION_CODE <= KERNEL_VERSION(4,1,0)
- splat_test_fini(sub, SPLAT_VNODE_TEST4_ID);
-#endif
splat_test_fini(sub, SPLAT_VNODE_TEST3_ID);
splat_test_fini(sub, SPLAT_VNODE_TEST2_ID);
splat_test_fini(sub, SPLAT_VNODE_TEST1_ID);
--- /dev/null
+#include <linux/module.h>
+#include <linux/vermagic.h>
+#include <linux/compiler.h>
+
+MODULE_INFO(vermagic, VERMAGIC_STRING);
+
+struct module __this_module
+__attribute__((section(".gnu.linkonce.this_module"))) = {
+ .name = KBUILD_MODNAME,
+ .init = init_module,
+#ifdef CONFIG_MODULE_UNLOAD
+ .exit = cleanup_module,
+#endif
+ .arch = MODULE_ARCH_INIT,
+};
+
+static const struct modversion_info ____versions[]
+__used
+__attribute__((section("__versions"))) = {
+ { 0x28950ef1, __VMLINUX_SYMBOL_STR(module_layout) },
+ { 0xb7b69dab, __VMLINUX_SYMBOL_STR(vn_fsync) },
+ { 0x98ab5c8d, __VMLINUX_SYMBOL_STR(kmalloc_caches) },
+ { 0x65e75cb6, __VMLINUX_SYMBOL_STR(__list_del_entry) },
+ { 0xd2b09ce5, __VMLINUX_SYMBOL_STR(__kmalloc) },
+ { 0xf9a482f9, __VMLINUX_SYMBOL_STR(msleep) },
+ { 0xd8b5eb52, __VMLINUX_SYMBOL_STR(z_uncompress) },
+ { 0xd670e116, __VMLINUX_SYMBOL_STR(spl_kmem_alloc_warn) },
+ { 0xf5893abf, __VMLINUX_SYMBOL_STR(up_read) },
+ { 0x4be94236, __VMLINUX_SYMBOL_STR(rwsem_tryupgrade) },
+ { 0xe6da44a, __VMLINUX_SYMBOL_STR(set_normalized_timespec) },
+ { 0xd6ee688f, __VMLINUX_SYMBOL_STR(vmalloc) },
+ { 0x784213a6, __VMLINUX_SYMBOL_STR(pv_lock_ops) },
+ { 0x4b7dcf38, __VMLINUX_SYMBOL_STR(_raw_qspin_lock) },
+ { 0x754d539c, __VMLINUX_SYMBOL_STR(strlen) },
+ { 0xbd6bcd08, __VMLINUX_SYMBOL_STR(crhold) },
+ { 0x19302b91, __VMLINUX_SYMBOL_STR(vn_close) },
+ { 0xcd44eb00, __VMLINUX_SYMBOL_STR(taskq_create) },
+ { 0xce6d7d76, __VMLINUX_SYMBOL_STR(crgetruid) },
+ { 0xc8b57c27, __VMLINUX_SYMBOL_STR(autoremove_wake_function) },
+ { 0x8d7e0b91, __VMLINUX_SYMBOL_STR(vn_getattr) },
+ { 0x930484aa, __VMLINUX_SYMBOL_STR(cpu_online_mask) },
+ { 0x79aa04a2, __VMLINUX_SYMBOL_STR(get_random_bytes) },
+ { 0xb342d16a, __VMLINUX_SYMBOL_STR(spl_kmem_alloc) },
+ { 0xe7813a4, __VMLINUX_SYMBOL_STR(rootdir) },
+ { 0x73a78bc4, __VMLINUX_SYMBOL_STR(downgrade_write) },
+ { 0xa08322cc, __VMLINUX_SYMBOL_STR(taskq_init_ent) },
+ { 0x16837e70, __VMLINUX_SYMBOL_STR(kobj_close_file) },
+ { 0xc0a3d105, __VMLINUX_SYMBOL_STR(find_next_bit) },
+ { 0x89291f9f, __VMLINUX_SYMBOL_STR(kobj_get_filesize) },
+ { 0xbaeceadd, __VMLINUX_SYMBOL_STR(crgetngroups) },
+ { 0xa1f9a134, __VMLINUX_SYMBOL_STR(__x86_indirect_thunk_rsi) },
+ { 0x3098be9f, __VMLINUX_SYMBOL_STR(crgetgroups) },
+ { 0xeef161aa, __VMLINUX_SYMBOL_STR(groups_free) },
+ { 0x4ed12f73, __VMLINUX_SYMBOL_STR(mutex_unlock) },
+ { 0xda0b5604, __VMLINUX_SYMBOL_STR(vn_rdwr) },
+ { 0x999e8297, __VMLINUX_SYMBOL_STR(vfree) },
+ { 0xea79001e, __VMLINUX_SYMBOL_STR(crgetsuid) },
+ { 0x91715312, __VMLINUX_SYMBOL_STR(sprintf) },
+ { 0x8eb0a41f, __VMLINUX_SYMBOL_STR(tsd_destroy) },
+ { 0xe5779a08, __VMLINUX_SYMBOL_STR(spl_kmem_cache_free) },
+ { 0x53c639a, __VMLINUX_SYMBOL_STR(ddi_strtoul) },
+ { 0xbc32eee7, __VMLINUX_SYMBOL_STR(spl_panic) },
+ { 0x7d11c268, __VMLINUX_SYMBOL_STR(jiffies) },
+ { 0x343a1a8, __VMLINUX_SYMBOL_STR(__list_add) },
+ { 0xe196a9f7, __VMLINUX_SYMBOL_STR(mutex_trylock) },
+ { 0x57a6ccd0, __VMLINUX_SYMBOL_STR(down_read) },
+ { 0x4e2dcaae, __VMLINUX_SYMBOL_STR(spl_kthread_create) },
+ { 0x35225ea3, __VMLINUX_SYMBOL_STR(down_write_trylock) },
+ { 0xde9360ba, __VMLINUX_SYMBOL_STR(totalram_pages) },
+ { 0x72cf8c8b, __VMLINUX_SYMBOL_STR(crgetuid) },
+ { 0x41972754, __VMLINUX_SYMBOL_STR(make_kgid) },
+ { 0xf432dd3d, __VMLINUX_SYMBOL_STR(__init_waitqueue_head) },
+ { 0x71de9b3f, __VMLINUX_SYMBOL_STR(_copy_to_user) },
+ { 0xfe7c4287, __VMLINUX_SYMBOL_STR(nr_cpu_ids) },
+ { 0x6b220bcb, __VMLINUX_SYMBOL_STR(taskq_destroy) },
+ { 0xf23b2e74, __VMLINUX_SYMBOL_STR(misc_register) },
+ { 0xfb578fc5, __VMLINUX_SYMBOL_STR(memset) },
+ { 0xb51262a, __VMLINUX_SYMBOL_STR(spl_kmem_cache_destroy) },
+ { 0x29eec2f0, __VMLINUX_SYMBOL_STR(vmem_size) },
+ { 0x24bd0182, __VMLINUX_SYMBOL_STR(taskq_wait_id) },
+ { 0xb8c7ff88, __VMLINUX_SYMBOL_STR(current_task) },
+ { 0xadd3247e, __VMLINUX_SYMBOL_STR(__cv_signal) },
+ { 0x9a025cd5, __VMLINUX_SYMBOL_STR(__mutex_init) },
+ { 0x27e1a049, __VMLINUX_SYMBOL_STR(printk) },
+ { 0x42f90a31, __VMLINUX_SYMBOL_STR(kthread_stop) },
+ { 0x5d5704d7, __VMLINUX_SYMBOL_STR(crgetrgid) },
+ { 0x449ad0a7, __VMLINUX_SYMBOL_STR(memcmp) },
+ { 0xefcbb1b, __VMLINUX_SYMBOL_STR(set_current_groups) },
+ { 0xe7b00dfb, __VMLINUX_SYMBOL_STR(__x86_indirect_thunk_r13) },
+ { 0x2e2e322f, __VMLINUX_SYMBOL_STR(taskq_wait) },
+ { 0x9166fada, __VMLINUX_SYMBOL_STR(strncpy) },
+ { 0x5aaafd45, __VMLINUX_SYMBOL_STR(__cv_timedwait) },
+ { 0x5a921311, __VMLINUX_SYMBOL_STR(strncmp) },
+ { 0x9abdea30, __VMLINUX_SYMBOL_STR(mutex_lock) },
+ { 0x5f08dbe, __VMLINUX_SYMBOL_STR(system_taskq) },
+ { 0x589fea99, __VMLINUX_SYMBOL_STR(taskq_dispatch) },
+ { 0x521445b, __VMLINUX_SYMBOL_STR(list_del) },
+ { 0x6c2c274e, __VMLINUX_SYMBOL_STR(spl_vmem_zalloc) },
+ { 0xc5fdef94, __VMLINUX_SYMBOL_STR(call_usermodehelper) },
+ { 0x794379bf, __VMLINUX_SYMBOL_STR(crgetsgid) },
+ { 0x3b4ceb4a, __VMLINUX_SYMBOL_STR(up_write) },
+ { 0xe6e3b875, __VMLINUX_SYMBOL_STR(down_write) },
+ { 0x1b27ac37, __VMLINUX_SYMBOL_STR(crgetgid) },
+ { 0xb75ecbeb, __VMLINUX_SYMBOL_STR(__cv_broadcast) },
+ { 0x3323ccb1, __VMLINUX_SYMBOL_STR(tsd_get) },
+ { 0x5dbd6138, __VMLINUX_SYMBOL_STR(taskq_dispatch_ent) },
+ { 0x9d271bf, __VMLINUX_SYMBOL_STR(spl_kmem_cache_expire) },
+ { 0x6be0bc63, __VMLINUX_SYMBOL_STR(init_task) },
+ { 0xfd07bd40, __VMLINUX_SYMBOL_STR(spl_kmem_alloc_max) },
+ { 0x55de2e28, __VMLINUX_SYMBOL_STR(z_compress_level) },
+ { 0xc50bab05, __VMLINUX_SYMBOL_STR(unregister_shrinker) },
+ { 0x3e43bb06, __VMLINUX_SYMBOL_STR(__cv_wait) },
+ { 0xf76b5740, __VMLINUX_SYMBOL_STR(crfree) },
+ { 0x93fca811, __VMLINUX_SYMBOL_STR(__get_free_pages) },
+ { 0xf0fdf6cb, __VMLINUX_SYMBOL_STR(__stack_chk_fail) },
+ { 0xd62c833f, __VMLINUX_SYMBOL_STR(schedule_timeout) },
+ { 0x1000e51, __VMLINUX_SYMBOL_STR(schedule) },
+ { 0xa202a8e5, __VMLINUX_SYMBOL_STR(kmalloc_order_trace) },
+ { 0x958b84e3, __VMLINUX_SYMBOL_STR(tsd_create) },
+ { 0xf0202554, __VMLINUX_SYMBOL_STR(spl_kmem_cache_create) },
+ { 0x68c4f9da, __VMLINUX_SYMBOL_STR(taskq_wait_outstanding) },
+ { 0xa2724b1e, __VMLINUX_SYMBOL_STR(kobj_read_file) },
+ { 0x2ea2c95c, __VMLINUX_SYMBOL_STR(__x86_indirect_thunk_rax) },
+ { 0x211f68f1, __VMLINUX_SYMBOL_STR(getnstimeofday64) },
+ { 0xfe172afe, __VMLINUX_SYMBOL_STR(spl_vmem_alloc) },
+ { 0xe65cdceb, __VMLINUX_SYMBOL_STR(wake_up_process) },
+ { 0xd1aa34d4, __VMLINUX_SYMBOL_STR(spl_kmem_cache_alloc) },
+ { 0xbdfb6dbb, __VMLINUX_SYMBOL_STR(__fentry__) },
+ { 0xa3a77c69, __VMLINUX_SYMBOL_STR(down_read_trylock) },
+ { 0x123f82f3, __VMLINUX_SYMBOL_STR(getrawmonotonic64) },
+ { 0x41ec4c1a, __VMLINUX_SYMBOL_STR(kmem_cache_alloc_trace) },
+ { 0xf1e4497, __VMLINUX_SYMBOL_STR(__cv_init) },
+ { 0x4302d0eb, __VMLINUX_SYMBOL_STR(free_pages) },
+ { 0xcf21d241, __VMLINUX_SYMBOL_STR(__wake_up) },
+ { 0xb3f7646e, __VMLINUX_SYMBOL_STR(kthread_should_stop) },
+ { 0x6cd72a01, __VMLINUX_SYMBOL_STR(vn_open) },
+ { 0x36bd681b, __VMLINUX_SYMBOL_STR(groups_alloc) },
+ { 0x1285cb78, __VMLINUX_SYMBOL_STR(tsd_set) },
+ { 0x3896a905, __VMLINUX_SYMBOL_STR(__thread_exit) },
+ { 0x37a0cba, __VMLINUX_SYMBOL_STR(kfree) },
+ { 0x82fe53e1, __VMLINUX_SYMBOL_STR(ddi_strtol) },
+ { 0x69acdf38, __VMLINUX_SYMBOL_STR(memcpy) },
+ { 0x5c8b5ce8, __VMLINUX_SYMBOL_STR(prepare_to_wait) },
+ { 0x9518b623, __VMLINUX_SYMBOL_STR(register_shrinker) },
+ { 0xf68905fd, __VMLINUX_SYMBOL_STR(ddi_strtoull) },
+ { 0xd9ace09, __VMLINUX_SYMBOL_STR(ddi_strtoll) },
+ { 0xfa66f77c, __VMLINUX_SYMBOL_STR(finish_wait) },
+ { 0x4cbbd171, __VMLINUX_SYMBOL_STR(__bitmap_weight) },
+ { 0x2109bc3a, __VMLINUX_SYMBOL_STR(random_get_pseudo_bytes) },
+ { 0xa88e7496, __VMLINUX_SYMBOL_STR(kobj_open_file) },
+ { 0x8a51e16a, __VMLINUX_SYMBOL_STR(groupmember) },
+ { 0x401c592f, __VMLINUX_SYMBOL_STR(spl_version) },
+ { 0x28318305, __VMLINUX_SYMBOL_STR(snprintf) },
+ { 0x6d16801a, __VMLINUX_SYMBOL_STR(spl_kmem_free) },
+ { 0x83aa5282, __VMLINUX_SYMBOL_STR(spl_kmem_cache_reap_now) },
+ { 0x47805038, __VMLINUX_SYMBOL_STR(__thread_create) },
+ { 0x77e2f33, __VMLINUX_SYMBOL_STR(_copy_from_user) },
+ { 0xff749bc, __VMLINUX_SYMBOL_STR(spl_vmem_free) },
+ { 0xd92839b8, __VMLINUX_SYMBOL_STR(taskq_cancel_id) },
+ { 0xa1012e43, __VMLINUX_SYMBOL_STR(misc_deregister) },
+ { 0x2a6e6109, __VMLINUX_SYMBOL_STR(__init_rwsem) },
+ { 0xdb77dd01, __VMLINUX_SYMBOL_STR(taskq_dispatch_delay) },
+ { 0xbccac85e, __VMLINUX_SYMBOL_STR(p0) },
+ { 0x459a3b05, __VMLINUX_SYMBOL_STR(__cv_destroy) },
+ { 0x584f0fa4, __VMLINUX_SYMBOL_STR(vn_openat) },
+ { 0x9b0325e8, __VMLINUX_SYMBOL_STR(spl_kmem_zalloc) },
+ { 0xa2b0e8ef, __VMLINUX_SYMBOL_STR(taskq_empty_ent) },
+};
+
+static const char __module_depends[]
+__used
+__attribute__((section(".modinfo"))) =
+"depends=spl";
+
+
+MODULE_INFO(srcversion, "FA48BA642E4DB597F2B22E9");
+MODULE_INFO(rhelversion, "7.4");
+#ifdef RETPOLINE
+ MODULE_INFO(retpoline, "Y");
+#endif
subdir = rpm
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/kernel-ctl-table-name.m4 \
+ $(top_srcdir)/config/kernel-fallocate.m4 \
+ $(top_srcdir)/config/kernel-group-info.m4 \
+ $(top_srcdir)/config/kernel-inode-lock.m4 \
+ $(top_srcdir)/config/kernel-kmem-cache.m4 \
+ $(top_srcdir)/config/kernel-kuidgid.m4 \
+ $(top_srcdir)/config/kernel-pde-data.m4 \
+ $(top_srcdir)/config/kernel-rw.m4 \
+ $(top_srcdir)/config/kernel-rwsem.m4 \
+ $(top_srcdir)/config/kernel-sched.m4 \
+ $(top_srcdir)/config/kernel-set-fs-pwd.m4 \
+ $(top_srcdir)/config/kernel-shrinker.m4 \
+ $(top_srcdir)/config/kernel-spinlock.m4 \
+ $(top_srcdir)/config/kernel-timer.m4 \
+ $(top_srcdir)/config/kernel-trim-unused-symbols.m4 \
+ $(top_srcdir)/config/kernel-truncate-range.m4 \
+ $(top_srcdir)/config/kernel-urange-sleep.m4 \
+ $(top_srcdir)/config/kernel-vfs-fsync.m4 \
+ $(top_srcdir)/config/kernel-vfs-getattr.m4 \
+ $(top_srcdir)/config/kernel-wait.m4 \
+ $(top_srcdir)/config/kernel-zlib.m4 \
+ $(top_srcdir)/config/libtool.m4 \
$(top_srcdir)/config/ltoptions.m4 \
$(top_srcdir)/config/ltsugar.m4 \
$(top_srcdir)/config/ltversion.m4 \
$(srcdir)/spl-dkms.spec.in $(srcdir)/spl-kmod.spec.in \
$(srcdir)/spl.spec.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/kernel-ctl-table-name.m4 \
+ $(top_srcdir)/config/kernel-fallocate.m4 \
+ $(top_srcdir)/config/kernel-group-info.m4 \
+ $(top_srcdir)/config/kernel-inode-lock.m4 \
+ $(top_srcdir)/config/kernel-kmem-cache.m4 \
+ $(top_srcdir)/config/kernel-kuidgid.m4 \
+ $(top_srcdir)/config/kernel-pde-data.m4 \
+ $(top_srcdir)/config/kernel-rw.m4 \
+ $(top_srcdir)/config/kernel-rwsem.m4 \
+ $(top_srcdir)/config/kernel-sched.m4 \
+ $(top_srcdir)/config/kernel-set-fs-pwd.m4 \
+ $(top_srcdir)/config/kernel-shrinker.m4 \
+ $(top_srcdir)/config/kernel-spinlock.m4 \
+ $(top_srcdir)/config/kernel-timer.m4 \
+ $(top_srcdir)/config/kernel-trim-unused-symbols.m4 \
+ $(top_srcdir)/config/kernel-truncate-range.m4 \
+ $(top_srcdir)/config/kernel-urange-sleep.m4 \
+ $(top_srcdir)/config/kernel-vfs-fsync.m4 \
+ $(top_srcdir)/config/kernel-vfs-getattr.m4 \
+ $(top_srcdir)/config/kernel-wait.m4 \
+ $(top_srcdir)/config/kernel-zlib.m4 \
+ $(top_srcdir)/config/libtool.m4 \
$(top_srcdir)/config/ltoptions.m4 \
$(top_srcdir)/config/ltsugar.m4 \
$(top_srcdir)/config/ltversion.m4 \
rm -rf $RPM_BUILD_ROOT
%changelog
+* Mon Apr 09 2018 Tony Hutter <hutter2@llnl.gov> - 0.7.8-1
+- Released 0.7.8-1, detailed release notes are available at:
+- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.8
+* Wed Mar 14 2018 Tony Hutter <hutter2@llnl.gov> - 0.7.7-1
+- Released 0.7.7-1, detailed release notes are available at:
+- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.7
* Thu Feb 01 2018 Tony Hutter <hutter2@llnl.gov> - 0.7.6-1
- Released 0.7.6-1, detailed release notes are available at:
- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.6
%{_mandir}/man5/*
%changelog
+* Mon Apr 09 2018 Tony Hutter <hutter2@llnl.gov> - 0.7.8-1
+- Released 0.7.8-1, detailed release notes are available at:
+- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.8
+* Wed Mar 14 2018 Tony Hutter <hutter2@llnl.gov> - 0.7.7-1
+- Released 0.7.7-1, detailed release notes are available at:
+- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.7
* Thu Feb 01 2018 Tony Hutter <hutter2@llnl.gov> - 0.7.6-1
- Released 0.7.6-1, detailed release notes are available at:
- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.6
$(srcdir)/spl-dkms.spec.in $(srcdir)/spl-kmod.spec.in \
$(srcdir)/spl.spec.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/kernel-ctl-table-name.m4 \
+ $(top_srcdir)/config/kernel-fallocate.m4 \
+ $(top_srcdir)/config/kernel-group-info.m4 \
+ $(top_srcdir)/config/kernel-inode-lock.m4 \
+ $(top_srcdir)/config/kernel-kmem-cache.m4 \
+ $(top_srcdir)/config/kernel-kuidgid.m4 \
+ $(top_srcdir)/config/kernel-pde-data.m4 \
+ $(top_srcdir)/config/kernel-rw.m4 \
+ $(top_srcdir)/config/kernel-rwsem.m4 \
+ $(top_srcdir)/config/kernel-sched.m4 \
+ $(top_srcdir)/config/kernel-set-fs-pwd.m4 \
+ $(top_srcdir)/config/kernel-shrinker.m4 \
+ $(top_srcdir)/config/kernel-spinlock.m4 \
+ $(top_srcdir)/config/kernel-timer.m4 \
+ $(top_srcdir)/config/kernel-trim-unused-symbols.m4 \
+ $(top_srcdir)/config/kernel-truncate-range.m4 \
+ $(top_srcdir)/config/kernel-urange-sleep.m4 \
+ $(top_srcdir)/config/kernel-vfs-fsync.m4 \
+ $(top_srcdir)/config/kernel-vfs-getattr.m4 \
+ $(top_srcdir)/config/kernel-wait.m4 \
+ $(top_srcdir)/config/kernel-zlib.m4 \
+ $(top_srcdir)/config/libtool.m4 \
$(top_srcdir)/config/ltoptions.m4 \
$(top_srcdir)/config/ltsugar.m4 \
$(top_srcdir)/config/ltversion.m4 \
%{_mandir}/man5/*
%changelog
+* Mon Apr 09 2018 Tony Hutter <hutter2@llnl.gov> - 0.7.8-1
+- Released 0.7.8-1, detailed release notes are available at:
+- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.8
+* Wed Mar 14 2018 Tony Hutter <hutter2@llnl.gov> - 0.7.7-1
+- Released 0.7.7-1, detailed release notes are available at:
+- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.7
* Thu Feb 01 2018 Tony Hutter <hutter2@llnl.gov> - 0.7.6-1
- Released 0.7.6-1, detailed release notes are available at:
- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.6
subdir = scripts
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/kernel-ctl-table-name.m4 \
+ $(top_srcdir)/config/kernel-fallocate.m4 \
+ $(top_srcdir)/config/kernel-group-info.m4 \
+ $(top_srcdir)/config/kernel-inode-lock.m4 \
+ $(top_srcdir)/config/kernel-kmem-cache.m4 \
+ $(top_srcdir)/config/kernel-kuidgid.m4 \
+ $(top_srcdir)/config/kernel-pde-data.m4 \
+ $(top_srcdir)/config/kernel-rw.m4 \
+ $(top_srcdir)/config/kernel-rwsem.m4 \
+ $(top_srcdir)/config/kernel-sched.m4 \
+ $(top_srcdir)/config/kernel-set-fs-pwd.m4 \
+ $(top_srcdir)/config/kernel-shrinker.m4 \
+ $(top_srcdir)/config/kernel-spinlock.m4 \
+ $(top_srcdir)/config/kernel-timer.m4 \
+ $(top_srcdir)/config/kernel-trim-unused-symbols.m4 \
+ $(top_srcdir)/config/kernel-truncate-range.m4 \
+ $(top_srcdir)/config/kernel-urange-sleep.m4 \
+ $(top_srcdir)/config/kernel-vfs-fsync.m4 \
+ $(top_srcdir)/config/kernel-vfs-getattr.m4 \
+ $(top_srcdir)/config/kernel-wait.m4 \
+ $(top_srcdir)/config/kernel-zlib.m4 \
+ $(top_srcdir)/config/libtool.m4 \
$(top_srcdir)/config/ltoptions.m4 \
$(top_srcdir)/config/ltsugar.m4 \
$(top_srcdir)/config/ltversion.m4 \
/* vfs_getattr wants 2 args */
#undef HAVE_2ARGS_VFS_GETATTR
-/* vfs_unlink() wants 2 args */
-#undef HAVE_2ARGS_VFS_UNLINK
-
/* zlib_deflate_workspacesize() wants 2 args */
#undef HAVE_2ARGS_ZLIB_DEFLATE_WORKSPACESIZE
/* vfs_getattr wants 3 args */
#undef HAVE_3ARGS_VFS_GETATTR
-/* vfs_unlink() wants 3 args */
-#undef HAVE_3ARGS_VFS_UNLINK
-
/* vfs_getattr wants 4 args */
#undef HAVE_4ARGS_VFS_GETATTR
-/* vfs_rename() wants 4 args */
-#undef HAVE_4ARGS_VFS_RENAME
-
-/* vfs_rename() wants 5 args */
-#undef HAVE_5ARGS_VFS_RENAME
-
-/* vfs_rename() wants 6 args */
-#undef HAVE_6ARGS_VFS_RENAME
-
/* kernel defines atomic64_t */
#undef HAVE_ATOMIC64_T
/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
+/* yes */
+#undef HAVE_IO_SCHEDULE_TIMEOUT
+
/* kernel_read() take loff_t pointer */
#undef HAVE_KERNEL_READ_PPOS